ファイルテキストに直接適用するのではなく、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行ずつ」実行できます。