我有以下文件输出需要操作(清理)
"2016-02-29;tracking;teamA;Name;45,0;7,0;315,0;659;"this is some free text";"911 Some Category";"again #pattern2 some free text #pattern1 #pattern3"
我需要过滤并保留多个模式并清除线条的其余部分。该行应该看起来像
"2016-02-29;tracking;teamA;Name;45,0;7,0;315,0;659;"this is some free text";"911 Some Category";"#pattern2 #pattern1 #pattern3"
所以我需要操纵线的一部分并保留其余部分。
我找到了寻找多种模式的方法,比如
sed -e "s/#pattern1/#pattern1/g" -e "s/#pattern2/#pattern2/g"
我找到了删除除模式之外的所有内容的方法:
sed -e "s/.*#pattern1.*/#pattern1/g"
编辑: 我现在的解决方案:
我用awk(delimiter;),egrep -o取出部分行并将其粘贴到原始行。看起来像这样:
#!/bin/bash
FILE=$1
REGEXP="#(pattern1|pattern2|)"
paste $FILE <( cat $FILE |awk -F';' '{print$11}' | while read a; do a=$( echo $a | egrep -io "${REGEXP}" | sort -u ) ; echo ";"${a//$'\n'/ } ; done )
答案 0 :(得分:1)
虽然sed
肯定可以胜任,但我会使用grep
(或egrep
此处):
egrep -o "pattern1|pattern2|pattern3" inputfile | tr '\n' ' '
答案 1 :(得分:0)
您可以使用!
取消匹配,也可以使用选项-n
禁止自动打印。在这种情况下,您需要使用n
命令显式打印要保留的行。