16

所以我有一个带有文本的文件:

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

我想使用 grep 命令

grep puddle2_1557936

与 cut 命令(或必要时的其他命令)混合以仅显示此部分:

/home/rogers.williams/folderz/puddle2

到目前为止,我知道如果这样做

 grep puddle2_1557936 | cut -d ":" -f1

然后它会显示

puddle2_1557936

那么有没有一种“反转”分隔符剪切命令?

注意:解决方案必须grep puddle2_15579636.

4

1 回答 1

44

您无需更改分隔符即可使用 . 显示字符串的右侧部分cut

命令的-f开关cut是由分隔符分隔的第 n 个元素 : :,因此您只需键入 :

 grep puddle2_1557936 | cut -d ":" -f2

如果您想要有趣的另一种解决方案(稍微调整一下):

使用

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 -lne '/puddle2_1557936:(.*)/ and print $1' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'                                                      
/home/rogers.williams/folderz/puddle2

或使用​​ (感谢glenn jackman )

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

或使用

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

或使用

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

或仅使用

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

或在

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

或在

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
于 2013-06-19T22:13:17.830 回答