#author("2017-09-17T19:12:21+09:00","","")
#navi(../)
* 特定文字以降の文字列を削除する方法 [#rd232797]
findやgrepの出力結果を使用して特定文字以降を削除したくなる場合がありますよね!?~
以下にawkをつかった使用例を記します。

#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)

* 関連記事 [#n6639e4d]
-[[awkの出力をカンマ区切りにする方法>逆引きシェルスクリプト/awkの出力をカンマ区切りにする方法]]
-[[awkコマンドの区切り文字をカンマに変更>逆引きシェルスクリプト/awkコマンドの区切り文字をカンマに変更]]
-[[特定のカラムを削除し表示する・awkコマンド>逆引きシェルスクリプト/特定のカラムを削除し表示する・awkコマンド]]

* awkのsubを使って実現 [#ua995849]
awkのsubを使って実現します。~
記述は正規表現で書くことができます。

実際に特定文字を指定した実行例を記します。~

-bar以降を削除します。
 sakura@stream:~$ echo foo/bar/hoge | awk '{ sub("bar.*$",""); print $0; }'
 foo/
#br
-hoge以降を削除します。
 sakura@stream:~$ echo foo/bar/hoge123 | awk '{ sub("hoge.*$",""); print $0; }'
 foo/bar/
#br
subの2番めの引数を指定すれば、削除し置換することもできます。
 sakura@stream:~$ echo foo/bar/hoge123 | awk '{ sub("hoge.*$","#"); print $0; }'
 foo/bar/#

上記の結果より、以下の構文で実現することができます。
 awk '{ sub("特定文字列.*$", ""); print $0;
特定文字列''.*$''の''.*$''は特定文字列から最後まで文字列を示しています。

* 番外:awkのsubを使って置換 [#fd3372d7]
尚、番外になりますが、subを使えば置換することもできます。~
- barをBARに置換
 sakura@stream:~$ echo foo/bar/hoge | awk '{ sub("bar","BAR"); print $0; }'
 foo/BAR/hoge
#br
trコマンドでも同様のことができます。
 sakura@stream:~$ echo foo/bar/hoge | tr bar BAR
 foo/BAR/hoge

以上、awkのsubを使って特定文字列(指定文字列)以降の文字列を削除する方法でした。

#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS