![](/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.