非常に大きな文書には次の文字列があります。
1.test.html#
2.test.md#
3.http://test.html#
4.https://test.md#
5.http://test.md#
6.test2.md#
今、文字列に何もない.md#
場合にのみ、それぞれを次のように置き換えたいと思います。したがって、2と6のみを交換する必要があります。シェルスクリプトでこれをどのように実行できますか?.html#
http
答え1
GNU sedを使用してください。現在の行(パターンスペース)にhttp
スクリプトの終わり()が含まれている場合は、スクリプトの最後に移動しますb
。それ以外の場合は検索して置き換えてください。
sed '/http/b; s/\.md#/.html#/' file
出力:
1.テスト.html# 2.テスト.html# 3.http://test.html# 4.https://test.md# 5.http://test.md# 6.テスト2.html#
ファイルを「所定の位置に」編集するには、sedのoptionsを使用します-i
。
望むより:man sed
答え2
perl -pe'/http/ or s/\.md#/.html#/' input.txt > output.txt
perl -pe'/http/||s/\.md#/.html#/' input.txt > output.txt #same
perl -i -pe'/http/||s/\.md#/.html#/' file.txt #edit inplace, changes file.txt
perl -i.bk -pe'/http/||s/\.md#/.html#/' files*.txt #same with backups to .bk files
sed
彼らはawk
素晴らしいですが、perl
彼らが持っているすべてとそれ以上のものを持っています。