web-dev-qa-db-ja.com

(bashシェルスクリプトUNIXで)grepおよびcut区切り文字コマンドを使用して-一種の「逆」?

だから私はテキストを含むファイルを持っています:

puddle2_1557936:/home/rogers.williams/folderz/puddle2

Grepコマンドを使いたい

grep puddle2_1557936

この部分だけを表示するために、カットコマンド(または必要に応じて別のコマンド)と混合します。

/home/rogers.williams/folderz/puddle2

これまでのところ、これを行うと

 grep puddle2_1557936 | cut -d ":" -f1

次に表示されます

puddle2_1557936

とにかく、区切り文字の切り取りコマンドを一種の「逆」にする方法はありますか?

注:ソリューションmustgrep puddle2_15579636で始まります。

7
DeaIss

cutを使用して文字列の正しい部分を表示するために区切り文字を変更する必要はありません。

-fcutコマンドのスイッチは、区切り文字で区切られたn-TH要素です::なので、次のように入力できます:

 grep puddle2_1557936 | cut -d ":" -f2

楽しみたい場合の別の解決策(少し調整してください):

grep の使用:

grep -oP 'puddle2_1557936:\K.*' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'                                                                        
/home/rogers.williams/folderz/puddle2

またはまだ 見回す正規表現

grep -oP '(?<=puddle2_1557936:).*' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'                                                                    
/home/rogers.williams/folderz/puddle2

または Perl を使用:

Perl -lne '/puddle2_1557936:(.*)/ and print $1' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'                                                      
/home/rogers.williams/folderz/puddle2

または Ruby を使用(- glenn jackman に感謝)

Ruby -F: -ane '/puddle2_1557936/ and puts $F[1]' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'
/home/rogers.williams/folderz/puddle2

または awk を使用:

awk -F'puddle2_1557936:' '{print $2}'  <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'
/home/rogers.williams/folderz/puddle2

または python を使用:

python -c 'import sys; print(sys.argv[1].split("puddle2_1557936:")[1])' 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'
/home/rogers.williams/folderz/puddle2

または bash のみを使用:

IFS=: read _ a <<< "puddle2_1557936:/home/rogers.williams/folderz/puddle2"
echo "$a"
/home/rogers.williams/folderz/puddle2

または jsShell で使用する:

js<<EOF
var x = 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'
print(x.substr(x.indexOf(":")+1))
EOF
/home/rogers.williams/folderz/puddle2

または phpShell で使用:

php -r 'preg_match("/puddle2_1557936:(.*)/", $argv[1], $m); echo "$m[1]\n";' 'puddle2_1557936:/home/rogers.williams/folderz/puddle2' 
/home/rogers.williams/folderz/puddle2
24
Gilles Quenot