スラッシュの後ろのすべての項目を印刷します。

スラッシュの後ろのすべての項目を印刷します。

スラッシュの前のすべての内容を印刷する方法を見つけましたが、スラッシュの後のすべての内容を印刷する必要があります。blablabal/important印刷する必要があるこのような文字列がありますimportant。スラッシュの前ではなく後ろのすべての内容を印刷するには、下の行をどのように変更する必要がありますか?

sed 's:/[^/]*$::'

答え1

最後のスラッシュの前のすべての項目を削除してください。

$ echo "blablabal/important" | sed 's:.*/::'
important

また、複数のスラッシュでも動作します。

$ echo "blablabal/not/ver/interesting/important" | sed 's:.*/::'
important

答え2

他の答えは、ファイルにすべて処理する必要がある複数のデータ行があると仮定します。この場合、sedまたはawk(またはcut)は、すべての行を一度に処理するのに最適なツールです。

ただし、シェル変数に1行しかない場合(これを使用していると仮定bash)、シェル拡張を使用して外部プロセスからユーティリティを作成することなく、目的の結果を得ることができます。

$ var="interesting/bla/blablabal/important"
$ 
$ # everything after the first slash:
$ echo "${var#*/}"
bla/blablabal/important
$ # everything after the last slash:
$ echo "${var##*/}"
important
$ # everything before the first slash:
$ echo "${var%%/*}"
interesting
$ # everything before the last slash:
$ echo "${var%/*}"
interesting/bla/blablabal
$ 

または、スラッシュで区切られた文字列がファイルパスであるとします。この場合、dirnameおよびを使用してbasenameパスとファイル名の部分を取得できます。

$ # everything before the last slash:
$ dirname "$var"
interesting/bla/blablabal
$ # everything after the last slash:
$ basename "$var"
important
$ 

答え3

あなたのコメントでは、ファイルにスラッシュが1つしかないと述べましたが、それを使用しないでくださいawk

例:

 ❱ echo "blablabal/important" | awk -F'/' '{print $1}'
blablabal
 ❱ echo "blablabal/important" | awk -F'/' '{print $2}'
important

答え4

sed -et -e's|/|&\n|;//D' <in >out

...スラッシュを含む行から最初のスラッシュ以降のすべての内容を印刷し、それ以外の場合は変更されていない内容を印刷します。削除すると、変更された行だけが//印刷されます。

\n代わりにリテラルewlineを使用することもできます。nただし、バージョン\nによって異なりますsed

そして発生回数を指定すると...

sed -et -e's|/|&\n|num;/\n/D'

...最大削除可能シリアル番号行のスラッシュは、少なくとも以下を含まない項目には影響しません。シリアル番号削減。

関連情報