如何删除仅在第一个分隔字段中包含/or'或-or的行?.|
sed 's/^\.\d; /^\-/d; /^\//d' file > file_out
Run Code Online (Sandbox Code Playgroud)
/|98374|
/trust|q83129|
//|392720|
//cust|23892|
.|9374|
.abcd|28374|
'|238674|
'hcsu|3810|
-|327492|
-abcde|9837|
Run Code Online (Sandbox Code Playgroud)
.abcd|28374|
/trust|q83129|
//cust|23892|
'hcsu|3810|
-abcde|9837|
Run Code Online (Sandbox Code Playgroud)
基于“强制”awk的解决方案:)
awk -F'|' '$1 !~ /^[\/'\''.-]+$/' input.txt
Run Code Online (Sandbox Code Playgroud)
这会将字段分隔符设置为|,并且仅在满足条件“第一个字段 ( $1) 与 RegEx ( !~) '仅包含/, ',.或-' ( ^[/'.-]+$,具有适当的转义) ”不匹配时才打印。
请注意,表达这一点的语法有点复杂,因为awk程序需要用单引号 ( ) 括起来' ... ',否则 shell 会像$1在到达 之前那样解释语句awk。因此,字符列表包含单引号的“中断”(第一个'),然后是转义文字单引号 ( \'),然后是单引号awk程序的延续。
或者,也许更容易阅读,将awk程序编写为一个'...'带引号的字符串、一个"..."带引号的字符串和另一个'...'带引号的字符串的串联:
awk -F'|' '$1 !~ /^'"[\/'.-]"'+$/' input.txt
Run Code Online (Sandbox Code Playgroud)