Bash
Linux
shellスクリプト

最近知った sed で文字列内の特定箇所を取り出す方法

最近 sed の便利な機能を知ったので投稿しときます。
sed は文字列の変換や削除などで登場機会がよくあると思いますが、こんな使い方もあるんです。
それではいってみましょ~!

コマンド

sed -e 's/.*\(.*\).*/\1/'

バックスラッシュで囲んだ、括弧である、\(.*\) で取り出したい部分を記述して、\1 で取り出したい部分を指定するカンジです。
ただの括弧だと、文字としての括弧と認識されてしまいます。
\(.*\) はテンプレとして覚えてください。

例文

id コマンドの結果からある文字列を取り出す例文を以下に記載します。

1.ユーザ名のみ取り出したい場合

id | sed -e 's/uid=.*(\(.*\)).*gid=.*/\1/'

2.プライマリグループ名のみ取り出したい場合

id | sed -e 's/uid=.*(\(.*\)).*gid=.*(\(.*\)).*/\2/'

date コマンドで YYYY を取り出すならこんな感じ。
date | sed -e 's/\(.*\)年.*/\1/'

よかったら、使ってみてください。