示例操作:
原文:
% echo -e "This is number 800 with decimal;other stuff\n44333; more data"
This is number 800 with decimal;other stuff
44333; more data
期望的 awk 结果:
% echo -e "This is number 800 with decimal;other stuff\n44333; more data" | awk
;other stuff
; more data
更新:毕竟答案:分隔符“;”每行仅一次,并且如果行存在则存在,因此我的解决方案将始终有效,但它不像其他解决方案那么通用(考虑空白行、没有分隔符的行或具有多个分隔符的行)。
答案1
在每个 Unix 机器上的任何 shell 中使用任何 awk 或 sed:
awk '{sub(/[^;]*/,"")}1' file
sed 's/[^;]*//' file
但上面的代码会为任何不包含的行打印空行;
,因此如果您的输入中可以存在此类行,那么这可能就是您想要的:
awk '{sub(/[^;]*;/,";")}1' file
sed 's/[^;]*;/;/' file
上面假设您希望;
按原样打印任何不包含 s 的行,或者您可能希望删除这些行:
awk 'sub(/[^;]*;/,";")' file
sed -n 's/[^;]*;/;/p' file
答案2
awk -F ';' 'BEGIN { OFS=FS } { $1 = "" }; 1'
这将读取每行的;
- 分隔字段并将第一个此类字段设置为空字符串。然后,所有行都将作为输出字段分隔符无条件输出(这就是孤行在1
最后所做的事情) 。;
鉴于您问题中的数据,这会生成
;other stuff
; more data
另一个测试:
$ cat file
123;456;789
a b c ; d e f ; g h i
abba
;;;;
$ awk -F ';' 'BEGIN { OFS=FS } { $1 = ""; print }' file
;456;789
; d e f ; g h i
;;;;
答案3
使用您显示的示例,请尝试以下awk
代码。
echo -e "This is number 800 with decimal;other stuff\n44333; more data" |
awk 'match($0,/^[^;]*/){ print substr($0,RSTART+RLENGTH)}'
;other stuff
; more data
答案4
简单的
% echo -e "This is number 800;other stuff\n44333; more data" | awk -F';' '{print ";"$2}'
;other stuff
; more data