1行ずつsedを適用

1行ずつsedを適用

ファイルテキストに直接適用するのではなく、sedを1行ずつ適用する方法を知っている人はいますか?

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ユーティリティsedが正規表現を拡張正規表現として解釈し、-n各入力行の暗黙的な出力をオフにします。

式に一致する行で複数の操作を実行するには、その行を囲みます{ ... }。たとえば、一致する各行を2回印刷します(一致しない行は印刷しません)。

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

変えるシェルループを使用したテキストファイルの処理、テキストをより自然に処理するツールを検討してください。:

$ 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それは目的ではありません。シェルの基本機能を使用して、すべての操作を「1行ずつ」実行できます。

関連情報