所以我有一个包含文本的文件:
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
开始。
最佳答案
您无需更改分隔符即可使用 cut
显示字符串的右侧部分。
cut
命令的 -f
开关是第 n 个元素,由分隔符分隔::
,因此您只需键入:
grep puddle2_1557936 | cut -d ":" -f2
如果你想玩得开心,另一个解决方案(稍微调整一下):
使用 grep :
grep -oP 'puddle2_1557936:\K.*' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'
/home/rogers.williams/folderz/puddle2
或仍使用 look around regex
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
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
关于bash - 使用 grep 和 cut delimiter 命令(在 bash shell 脚本 UNIX 中)- 和 "reversing"一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17202221/