我有很多行以“;”开头,然后是1个或更多空格,然后在同一行上还有其他一些字符。我需要删除“;”后面的空格最多但不包括后面的字符。
我尝试了以下代码的一些变体,因为它在带有空格的行上工作得很好,但是我对awk不太熟悉。
super
样本输入:
awk '{gsub(/^ +| +$/,"")}1' filea>fileb
想要的输出:
; 4
; group 452
; ring
答案 0 :(得分:2)
要删除第一个分号后的空白,请尝试:
$ awk '{sub(/^;[[:blank:]]+/, ";")} 1' filea
;4
;group 452
;ring
正则表达式^;[[:blank:]]+
匹配第一个分号以及其后的所有空格或制表符。函数sub
用;
代替。由于这仅发生一次(在开始时),因此不需要gsub
。
[:blank:]
是指定空格的Unicode安全方法。
答案 1 :(得分:2)
awk '{sub(/^; +/,";")}1' file
;4
;group 452
;ring
答案 2 :(得分:1)
sed
也可以:
sed -E 's/^(;){1}([[:blank:]]+)/\1/' file
括号用作选择器,\number
组合表示相应的选择。
在^(;){1}([[:blank:]]+)
中,我们检查行的开头(^
)和;
是否出现一次({1}
),然后是任意数量的空白字符{ {1}},然后将匹配的模式替换为我们的第一选择。
答案 3 :(得分:0)
这将字段分隔符FS
定义为记录的开头,后跟;
和一组空格。然后,它将输出字段分隔符OFS
重新定义为;
。从FS
到OFS
的转换是通过将$1
重新分配给自己完成的。
awk 'BEGIN{FS="^; *";OFS=";"}{$1=$1}1'
或
awk -F'^; *' -vOFS=";" '{$1=$1}1'