このエントリーをはてなブックマークに追加


特定文字以降の文字列を削除する方法

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を使って特定文字列(指定文字列)以降の文字列を削除する方法でした。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-09-17 (日) 19:12:21