文字列から単語で始まる部分文字列を抽出する方法

文字列から単語で始まる部分文字列を抽出する方法

私はbashスクリプトを書いていますが、時々これが起こります。 $path="things useless things... path/another/files1/useful/path/here"

そのため、「files1」の前のすべての単語とテキストを削除し、files1の後ろの部分(含む)を取得しようとします。

この例では、次のようになります。files1/useful/path/here

それ以降の部品は入手できますが、ファイル1は含まれません。

どうやってこれを達成できますか?

答え1

(ファイルスクリプトの場合)どうですか?

sed -n 's#\(path="\).*/\(files1/[^"]*"\)#\1\2#p' script

または値が変数の内部にある場合:


$ path="things useless things... path/another/files1/useful/path/here"

$ echo "/files1/${path##*/files1/}"

/files1/useful/path/here

答え2

次の構文を使用して、変数の前で${var#pattern}最も短い一致を削除できます。pattern

$ path="things useless things... path/another/files1/useful/path/here"
$ echo "${path#*another/}" 
files1/useful/path/here

あるいは、標準のテキスト解析ツールを使用することもできます。たとえば、

$ newPath=$(sed -E 's|.*(files1/)|\1|'<<<"$path")
$ echo $newPath 
files1/useful/path/here

答え3

これを使用しているので、内蔵bash正規表現エンジンを使用することもできます。

$ path="things useless things... path/another/files1/useful/path/here"
$ [[ "$path" =~ /files1/.*$ ]] && echo "$BASH_REMATCH"
/files1/useful/path/here

関連情報