我想在输出中提取不包含#和 delete"的;行。
我的输入文件如下所示:
# ;string"1"
# string"2";
string"3";
可以使用grepandtr来获得想要的输出:
grep -v '#' FILE | tr -d ';"'
string3
但是我想使用awk.
我可以提取 invert match ,awk '!/#/' FILE但是如何在同一命令 中使用subto delete ?";awk
我想在输出中提取不包含#和 delete"的;行。
我的输入文件如下所示:
# ;string"1"
# string"2";
string"3";
可以使用grepandtr来获得想要的输出:
grep -v '#' FILE | tr -d ';"'
string3
但是我想使用awk.
我可以提取 invert match ,awk '!/#/' FILE但是如何在同一命令 中使用subto delete ?";awk
您可以gsub用于全局替换:
awk '!/#/{gsub(/[";]/,"",$0);print}'
grep/tr以下记录显示了这一点,它提供了与您的管道相同的结果:
pax> echo '# ;string"1"
# string"2";
string"3";' | awk '!/#/{gsub(/[";]/,"",$0);print}{}'
string3
请注意,final{}在某些实现中可能不是必需的,awk但它可以在那些实现(通常是较旧的)中停止输出不匹配的行,这些实现会自动为不匹配任何规则的行执行此操作。
改用gsub它将替换所有匹配项,而不仅仅是一个:
awk '/#/{next}{gsub(/[";]/,"")}1' file
输出:
string3
gsub使其$0默认处理。/#/{next}使其跳过包含的行#1让它打印$0另一个awk版本
awk -F"[\";]" '{$1=$1} !/^#/' OFS= file
string3
awk '{gsub(/[";]/,x)} !/^#/' file
string3
x代表什么。也可以使用"",但会节省一个字符 :)
如果你想给sed一个机会:
sed -n '/^[^#]/s/[";]//gp' file
string3