我试图在第三个字段符合特定条件的文件中插入行。 我尝试使用grep但没有运气过滤掉文件中的字段。 我有一个充满这样的记录的文件:
12794357382;0;219;215
12795287063;0;220;215
12795432063;0;215;220
我只需要grep第三个字段等于215的行(在这种情况下,只有第三行)
非常感谢您的帮助!
答案 0 :(得分:5)
放下锤子。
$ awk -F ";" '$3 == 215 { print $0 }' <<< $'12794357382;0;219;215\n12795287063;0;220;215\n12795432063;0;215;220'
12795432063;0;215;220
答案 1 :(得分:2)
的grep:
grep -E "[^;]*;[^;]*;215;.*" yourFile
在这种情况下,awk会更容易:
awk -F';' '$3==215' yourFile
答案 2 :(得分:2)
用于预处理的纯bash解决方案,仍然需要grep
:
while read line; do
OLF_IFS=$IFS; IFS=";"
line_array=( $line )
IFS=$OLD_IFS
test "${line_array[2]}" = 215 && echo "$line"
done < file | grep _your_pattern_
答案 3 :(得分:1)
简单的egrep(= grep -E
)
egrep ';215;[0-d][0-d][0-d]$' /path/to/file
或
egrep ';215;[[:digit:]]{3}$' /path/to/file
答案 4 :(得分:1)
这样的事情怎么样:
cat your_file | while read line; do
if [ `echo "$line" | cut -d ";" -f 3` == "215" ]; then
# This is the line you want
fi
done
答案 5 :(得分:1)
这是第3个字段为215的行的grep的sed版本:
sed -n '/^[^;]*;[^;]*;215;/p' file.txt
答案 6 :(得分:1)
通过将第3个字段放在行的开头来简化您的问题:
cut -d ";" -f 3 file | paste -d ";" - file
然后grep
获取与第3个字段匹配的行,并删除开头的第3个字段:
grep "^215;" | cut -d ";" -f 2-
然后你可以grep
得到你想要的任何东西。所以完整的解决方案是:
cut -d ";" -f 3 file | paste -d ";" - file | grep "^215;" | cut -d ";" -f 2- | grep _your_pattern_
优势:易于理解; 缺点:很多流程。