逐行应用 sed

逐行应用 sed

有谁知道如何逐行应用 sed 而不是直接在文件文本上应用:

for i in $(cat server); do
    Exclude_List="AF|PO" 
    echo $i | egrep $LBB3B
    if [ $? -eq 0 ]; then
    **do my sed on the $i line only then continue on next line**
    fi
done

答案1

sed已经逐行工作:

sed -E '/AF|PO/{ ...sed expression to apply when matching... }' server

例如,仅打印与该正则表达式匹配的行:

sed -nE '/AF|PO/p' server

标志-Etosed使实用程序将正则表达式解释为扩展正则表达式,并-n关闭每个输入行的隐式输出。

要对与表达式匹配的行执行多项操作,请将它们括在{ ... }.例如,将每个匹配行打印两次(并且不打印不匹配的行):

sed -nE '/AF|OP/{p;p;}' server

答案2

sed 具有行寻址功能,如果这对您有帮助:

$ seq 5 > input
$ sed '3s/.*/jeff/' input
1
2
jeff
4
5
$ sed '3,5s/.*/new/' input
1
2
new
new
new

代替使用 shell 循环处理文本文件,考虑一种更自然地处理文本的工具,例如:

$ cat input
AF bar
PO baz
other stuff
more other stuff


$ awk '/(AF)|PO/ { print }' input
AF bar
PO baz

$ awk '/stuff/ && !/more/ { print }' input
other stuff

答案3

那不是sed目的。您可以使用 shell 的本机功能“逐行”执行所有操作。

相关内容