使用grep和cut delimiter命令(在bash shell脚本UNIX中) - 和那种"倒车"呢?

Dea*_*Iss 7 unix bash scripting grep cut

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

puddle2_1557936:/home/rogers.williams/folderz/puddle2
Run Code Online (Sandbox Code Playgroud)

我想使用grep命令

grep puddle2_1557936
Run Code Online (Sandbox Code Playgroud)

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

/home/rogers.williams/folderz/puddle2
Run Code Online (Sandbox Code Playgroud)

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

 grep puddle2_1557936 | cut -d ":" -f1
Run Code Online (Sandbox Code Playgroud)

然后它会显示

puddle2_1557936
Run Code Online (Sandbox Code Playgroud)

那么反正的定界符切割命令是什么呢?

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

Gil*_*not 24

您无需更改分隔符以显示字符串的右侧部分cut.

命令的-f切换cut是由分隔符:分隔的n-TH元素:,因此您只需键入:

 grep puddle2_1557936 | cut -d ":" -f2
Run Code Online (Sandbox Code Playgroud)

如果你想要有趣的话,另一个解决方案(适应一点):

使用:

grep -oP 'puddle2_1557936:\K.*' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'                                                                        
/home/rogers.williams/folderz/puddle2
Run Code Online (Sandbox Code Playgroud)

或者仍然看看

grep -oP '(?<=puddle2_1557936:).*' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'                                                                    
/home/rogers.williams/folderz/puddle2
Run Code Online (Sandbox Code Playgroud)

或者使用:

perl -lne '/puddle2_1557936:(.*)/ and print $1' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'                                                      
/home/rogers.williams/folderz/puddle2
Run Code Online (Sandbox Code Playgroud)

或使用(感谢格伦杰克曼)

ruby -F: -ane '/puddle2_1557936/ and puts $F[1]' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'
/home/rogers.williams/folderz/puddle2
Run Code Online (Sandbox Code Playgroud)

或者使用:

awk -F'puddle2_1557936:' '{print $2}'  <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'
/home/rogers.williams/folderz/puddle2
Run Code Online (Sandbox Code Playgroud)

或者使用:

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

或仅使用:

IFS=: read _ a <<< "puddle2_1557936:/home/rogers.williams/folderz/puddle2"
echo "$a"
/home/rogers.williams/folderz/puddle2
Run Code Online (Sandbox Code Playgroud)

或者在使用:

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

或者在使用:

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
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,红宝石与perl非常相似:`ruby -F:-ane'/ puddle2_1557936 /并且放入$ F [1]'` (2认同)