Chinaunix首页 | 论坛 | 博客
  • 博客访问: 61242
  • 博文数量: 21
  • 博客积分: 93
  • 博客等级: 民兵
  • 技术积分: 118
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-03 23:21
文章分类
文章存档

2013年(1)

2012年(15)

2011年(5)

我的朋友

分类:

2012-01-09 20:21:01

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

    ........
hello
........

我想要获取之间的结果,即hello,求帮忙

答案:         
答案:sed -r 's#.*>(.*)sed -n '/(?<=cd).*(?=cd)/p' file1
awk -F'|' '//,/<\/item>/{print $2}' a.txt
4.
比如我想将a.txt中第二行第二列的内容替换为22,求帮助
答案: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)
....

我想把行下的内容替换成12345(mmm),有个问题就是12345(abc) 可能是12345不包含(abc)部分,我不想用if判断,有没有比较直接的方法啊?
答案:sed -r "//{n;s/(\(.*\))?$/(mmm)/};"
                sed '//{n;s/\(.*(\).*/\1mmm)/}' file
7.
假设cat a.txt

aaa

那将下的行替换成 bbb
如果cat a.txt

aaa(x)
那就将下的行替换成bbb(x)

其中aaa是不确定的啊,简单地说 如果有括号,我只是想替换行下的括号前的部分。没有括号,则全部替换
答案: sed '//{n;s/[^(]*\((*\)/bbb\1/;}' a.txt
sed '//{n;s/[^(]*\(.*\)/bbb\1/}' file
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

 

阅读(2007) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~