分类:
2012-01-09 20:21:01
原文地址:awk sed grep 筛选文本总结 作者:流星奇幻
1.文件a.txt内容如下,我想筛选出login_version的值(22222222),求帮助
login_company:1111111111
login_version:222222222
index_sysname_cn:333333333333
index_company_cn:4444444444
index_sysname_HK:5555555555555
index_company_HK:6666666666
index_sysname_en:777777777777
index_company_en:8888888888
sys_login_name:99999999
show_version:00000000
答案:awk -F: '$1~/login_version/{print $2}' a.txt
sed -n 's/login_version:\(.*\)/\1/p'
2. 文件a.txt如下
hello
.......
我想把hello替换成 hi, hello不是固定的 是固定的 ,也就是说我想把行下的第一个非空行替换成hi,该怎么做啊?
答案:sed '//{:a;N;s/hello/hi/;t;ba}'
sed '/body/{:a;n;s/.\+/hi/;t;ba};'
sed '//{:la;n;/^$/bla;s/.*/hi/}'
awk '//{p=1}!NF{p++}p==2&&NF{$0="hi";p=0}1'
3. cat a.txt
........
........
我想要获取
答案:
答案:sed -r 's#.*>(.*)sed -n '/(?<=cd).*(?=cd)/p' file1
awk -F'
4.
答案:var=`awk 'NR==2{print $2}' a.txt`; sed -i "2s/${var}/22/" a.txt
awk '{if(NR==2)$2=22}1' urfile
sed -r '2s/(^[^ ]+) [^ ]+ (.*)/\1 22 \2/' urfile
5. 文件a.txt如下
hello
.......
我想把下的第一个行(无论是不是空行)替换成 hhhhhhhhhhhh,该怎么做啊?
答案:sed '/\/{n;s/^.*$/hhhhhhh/}'
awk '//{print;getline;print"hhhhhh";next}1'
sed '//{n;s/.*/hhhhhh/}' file
awk '//{print;getline;$0="hhh"}1' file
6. cat a.txt
12345(abc)
....
答案:sed -r "/
sed '/
7.
aaa
如果cat a.txt
aaa(x)
其中aaa是不确定的啊,简单地说 如果有括号,我只是想替换
答案: sed '/
sed '/
8.
awk
例如
aaa bbb ccc ddd
我想要bbb ccc ddd,当然aaa后面有多少个字符串不固定
答案:awk '{$1=""}1'
cut -d ' ' -f2-
awk '{sub("^"$1" *","")}1' file
awk '{$1=""}{print $0}' file
9. #!/bin/sh
tmpfile=test.txt
linenum=`cat ${tmpfile} | wc -l`
echo ${linenum}
for((i=1;i<=${linenum};i++)); do
echo ${i}
filename=`awk 'NR==$i {print $1}' ${tmpfile}`
echo ${filename}
awk '{if(NR==$i) {for(i=2;i<=NF;i++) print $i}}' ${tmpfile} > ./${filename}
done
cat test.txt
111 2222 33333 4444444
aaa 344334 45 ewgf ggs
ggggggg gdsgdsgssssssssssssssssss dggggggggggg
该脚本目的是生成生成3个文件,第一个文件名111,内容为2222 33333 4444444,第二个文件名aaa,内容为344334 45 ewgf ggs ,第三个文件名为ggggggg,内容为gdsgdsgssssssssssssssssss dggggggggggg。但是我执行的时候老是报错, filename取不出啊
答案:NR=="'$i'"
awk '{file=$1;$1="";print >file;close(file)}' test.txt
tar {comm} $(cut -d' ' f1 test.txt)
10. eth0_ip=10.10.10.10
eth1_ip=1.1.1.1
eth2_ip=2.2.2.2
for((i=0;i<3;i++))
do
echo ${eth${i}_ip}
done
echo ${eth${i}_ip} 这句写法不正确,请问该怎么写啊
答案:eval echo \${eth${i}_ip}
eval addr=\$eth${i}_ip;echo $addr
eth_ip=$(eval echo \${eth${i}_ip}); echo ${eth_ip}
for((i=0;i<3;i++)); do ip=`eval echo '$'{eth${i}_ip}`;echo $ip; done
11. a.txt内容如下
AAA
........
123 abc 456
........
BBB
........
222 bcd 456
.........
我想获取含有456的行 但是需要区分是AAA下面的 还是BBB下面的,该怎么做呢?
我想要的结果如下
AAA 123 abc 456
BBB 222 bcd 456
答:cat a.txt |awk '/AAA|BBB/{X=$0}/456/{print X,$0}'
12.cat a.txt
12345
错误1
abcdef
aaaaaa
错误
“错误”是固定的字符串,我要想获取的结果是含有错误的行和它的上一行,如下:
12345
错误1
aaaaaa
错误
答:cat a.txt |grep '错误' -B1
获取下一行用cat a.txt |grep '错误' -A1