我想在cut
命令的所有结果行中删除特定字符“/”后面的所有字符
我怎么能用bash命令呢?
例如cut -f2 file
结果:
John.Micheal/22
Erik.Conner/19
Damian.Lewis/40
我需要输出:
John.Micheal
Erik.Conner
Damian.Lewis
答案 0 :(得分:8)
您可以使用cut
作为字段分隔符将其传输到另一个/
:
cut -f2 file | cut -f1 -d/
或者您可以使用sed
来切断/
以外的所有内容:
cut -f2 file | sed 's?/.*??'
或者您可以使用带有自定义字段分隔符的单个awk
,假设第一个字段中没有/
:
awk -F'[\t/]' '{print $2}' file
如果第一个字段中可以有/
,那么最好使用前两个建议。
答案 1 :(得分:0)
或者使用纯bash while
循环逐行读入shell变量。一种选择:
cut -f2 file | while IFS=/ read -r a _; do echo "$a"; done
另一种选择:
cut -f2 file | while read -r a; do echo "${a%/*}"; done
第一个在读取期间使用IFS字分割,另一个使用参数扩展。
答案 2 :(得分:0)
在不知道您的文件内容的情况下,最好将cut -f2 file
的结果导出到@janos建议的另一个cut
或awk
或sed
,或者使用@ kastelian的方法
因为cut -f2 file
给你
John.Micheal/22
Erik.Conner/19
Damian.Lewis/40
我猜这是你原始文件的样子
ab/c John.Micheal/22 abc/23
de Erik.Conner/df abc
Damian.Lewis/40 def/999
而不是cut
并将输出传递给另一个命令,您可以直接获得结果
获取第一个选项卡和第一个/后选项卡之间的字符串
sed 's@^[^\t]*[\t]\+\([^/]\+\)/.*@\1@' file
或者如果你有GNU sed
sed -r 's@^[^\t]*[\t]+([^/]+)/.*@\1@' file
答案 3 :(得分:0)
只需使用awk就可以了:
awk -F'\t' '{split($2,a,"/"); print a[1]}' file
如果前2个字段中没有其他“/”,则可以缩减为:
awk -F'[\t/]' '{print $2}' file