![](/img/trans.png)
[英]Split a string to print first two characters delimited by “-” In Bash
[英]Print all columns but first delimited by pattern, bash
祝大家好日子
我想知道如何打印所有列,但首先,每列被分隔;
。
例:
abc; def; ghi; jkl
获得:
def; ghi; jkl
到目前为止我已经完成了
awk 'BEGIN { FS = ";" } ; {for(i=2;i<NF;i++)printf "%s",$i OFS; if (NF) printf "%s",$NF; printf ORS}'
非常感谢任何线索。
只需使用cut
:
cut -f2- -d\; filename.txt
如果您的输入来自stdin:
echo "abc; def; ghi; jkl" | cut -f2- -d\;
如果你知道它总是以空格分隔:
echo "abc; def; ghi; jkl" | while read ignore line ; do echo $line ; done
while read
部分可以采用多个参数:在这种情况下, ignore
将采用第一个段,直到第一个分隔符(意思是“ abc;
”),并且未读取的任何内容将被放入其余参数中。 在这种情况下,它是line
,因此line
包含您打印出来的“ def; ghi; jkl
”。
echo "abc; def; ghi; jkl" | while read first second third ; do echo $first; echo $second; echo $third; done
将输出
abc;
def;
ghi; jkl
编辑:
如果您知道它将由其他标记分隔,则可以更改IFS
值:
IFS=";" ; echo "abc; def; ghi; jkl" | while read first second third ; do echo $first; echo $second; echo $third; done
生产:
abc
def
ghi jkl
(注意def
和ghi
之前的空格)。
一个bash函数:
$ myshift() {
local IFS=';'
set -- $1
shift
echo "$*"
}
$ myshift "abc; def; ghi; jkl"
def; ghi; jkl
只是为了与awk
一起玩:
$ echo "abc; def; ghi; jkl"|awk -F "; " '{$1=""; gsub("^ +", "", $0); print}'
def; ghi; jkl
使用sed
:
$ echo "abc; def; ghi; jkl"|sed "s/^[^;]\{1,\};\ \{1,\}//g"
def; ghi; jkl
正如您所看到的那样, cut
版本会在行的开头打印一个空格;)
$ echo "abc; def; ghi; jkl"|cut -d";" -f2-
def; ghi; jkl
所以你也可以尝试这样的事情:
$ echo "abc; def; ghi; jkl"|cut -d";" -f2-|xargs
def; ghi; jkl
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.