bash - 使用 grep 和 cut delimiter 命令(在 bash shell 脚本 UNIX 中)- 和 "reversing"一样吗?

标签 bash unix scripting grep cut

所以我有一个包含文本的文件:

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 -oP 'puddle2_1557936:\K.*' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'                                                                        
/home/rogers.williams/folderz/puddle2

或仍使用 look around

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

关于bash - 使用 grep 和 cut delimiter 命令(在 bash shell 脚本 UNIX 中)- 和 "reversing"一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17202221/

相关文章:

bash - 忽略 bash 变量

python - Aptana (eclipse) 无法识别对 .bashrc 中编写的 PATH 的修改

shell - 读到空格

php - 删除用户 > 还需要删除他们的项目,然后删除该项目的事件吗?

linux - 使用 netpipes/netcat 绑定(bind)端口

regex - 为什么 grep 不能在这种模式下使用冒号?

bash - 使用 sed 将别名添加到 .bashrc 文件中别名列表的末尾

c - openssl 编译错误

python - 如何在 python 中将日期时间转换为unix时间戳

bash - 在 bash 中添加(收集)退出代码