私はこれを持っています:
echo "walking ringer talking"
sedを使用して次の出力を取得するにはどうすればよいですか?
walked ringer talked
いくつかの方法を試しましたが、正しく動作しません。次のコマンドは私が試したものです。
echo "walking ringer talking" | sed 's/ing/ed/g'
この出力はwalked reder talked
。
echo "walking ringer talking" | sed 's/ing$/ed/g'
この出力はwalking ringer talked
。
echo "walking ringer talking" | sed 's/^ing/ed/g;s/ing$/ed/g'
この出力はwalking ringer talked
。
bashスクリプトでこれを実行しようとしています。
答え1
パターンの末尾のスペースまたは改行文字を一致させるには、次のようにします。
sed -E 's/ing( |$)/ed\1/g'
答え2
awkは文字列を3つの部分に分割し、必要な要素を置き換えます。これにより、print $0
完全な(新しい)文字列が返されます。
echo $s | awk 'BEGIN{a[1]=a[3]}{for(x in a)gsub("ing","ed",$x); print $0 }'
答え3
「単語の終わり」タグを使用できます。
$ echo "walking ringer talking" | sed 's/ing\>/ed/g'
walked ringer talked
\>
左の単語文字と右の単語以外の文字を一致させます。
または、あまり具体的ではない単語境界を使用すると、次のようになります。
$ echo "walking ringer talking" | sed 's/ing\b/ed/g'
walked ringer talked
\b
すべての単語境界と一致しますが、単語文字の後に来る場合と同じです\>
。
答え4
's/ing /ed /g;
3番目のテストではスペースを追加します。
#echo "walking ringer talking" | sed 's/^ing/ed/g;s/ing$/ed/g'
echo "walking ringer talking" | sed 's/ing /ed /g;s/ing$/ed/g'
たとえば、
user@host:/tmp/test$ echo "walking ringer talking" | sed 's/ing /ed/g;s/ing$/ed/g'
walked ringer talked