有谁知道如何逐行应用 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
标志-E
tosed
使实用程序将正则表达式解释为扩展正则表达式,并-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 循环处理文本文件,考虑一种更自然地处理文本的工具,例如awk:
$ 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 的本机功能“逐行”执行所有操作。