特定文字以降の文字列を削除する方法 †
findやgrepの出力結果を使用して特定文字以降を削除したくなる場合がありますよね!?
以下にawkをつかった使用例を記します。
関連記事 †
awkのsubを使って実現 †
awkのsubを使って実現します。
記述は正規表現で書くことができます。
実際に特定文字を指定した実行例を記します。
- bar以降を削除します。
sakura@stream:~$ echo foo/bar/hoge | awk '{ sub("bar.*$",""); print $0; }'
foo/
- hoge以降を削除します。
sakura@stream:~$ echo foo/bar/hoge123 | awk '{ sub("hoge.*$",""); print $0; }'
foo/bar/
subの2番めの引数を指定すれば、削除し置換することもできます。
sakura@stream:~$ echo foo/bar/hoge123 | awk '{ sub("hoge.*$","#"); print $0; }'
foo/bar/#
上記の結果より、以下の構文で実現することができます。
awk '{ sub("特定文字列.*$", ""); print $0;
特定文字列.*$の.*$は特定文字列から最後まで文字列を示しています。
番外:awkのsubを使って置換 †
尚、番外になりますが、subを使えば置換することもできます。
- barをBARに置換
sakura@stream:~$ echo foo/bar/hoge | awk '{ sub("bar","BAR"); print $0; }'
foo/BAR/hoge
trコマンドでも同様のことができます。
sakura@stream:~$ echo foo/bar/hoge | tr bar BAR
foo/BAR/hoge
以上、awkのsubを使って特定文字列(指定文字列)以降の文字列を削除する方法でした。