1

sedコマンドの初心者ですLinux。今、私はファイルに1行あります:

exten => *97,ttttt

そして、この行を 2 行に置き換えたいと思います。

exten => *97,aaaaa
exten => *97,bbbbb

元のテキストが静的な場合、次のようなコマンドを記述して行を置き換えることができます。

sed -e 's/,ttttt/,aaaaa\nexten => *97,bbbbb/' -i xxxx.txt

しかし、どういうわけかファイルxxxx.txtはスクリプトによって生成されるため、次回は次のようになる*97可能性があります。*95xxxx.txt

exten => *95,ttttt

今回は、次の 2 行に置き換える必要があります。

exten => *95,aaaaa
exten => *95,bbbbb

この場合、2行目sedに書き込む*97ため、上記のコマンドを実行できません。

sed毎回コマンド を書き直す必要がなく、正しく仕事をする方法はありますか?

4

2 に答える 2

2

グループ 1 の数字とグループ 2 の数字までのすべてのデータを保存してみてください。次に、それらの後の別の文字列とそれらの間の改行文字で 2 回置き換えます。

sed -e 's/^\(.*\)\(\*[0-9]\+\).*$/\1\2,aaaaa\n\1\2,bbbbb/' infile

次の結果が得られます。

exten => *97,aaaaa
exten => *97,bbbbb
于 2013-10-25T23:03:18.997 に答える
1

解決策を求められましたsedが、それを行うこともできますawk

echo "exten => *97,ttttt" | awk -F, '{print $1 ",aaaaa\n" $1 ",bbbbb"}'
exten => *97,aaaaa
exten => *97,bbbbb

の複雑な構文と比較して、理解しやすいかもしれませんを使用して、文字列を 2 つの 部分にsed
分割します 。,-F,
aaaaa\n
bbbbb

于 2013-10-26T07:37:54.297 に答える