LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 8458|回复: 9

RE,grep,sed,awk论坛题目总结!(不断整理中......)

[复制链接]
发表于 2005-5-13 23:08:51 | 显示全部楼层 |阅读模式
1,怎样处理用户名?(怎样从/etc/passwd中把用户目录读出来?)
http://www.linuxsir.cn/bbs/showt ... 2&highlight=sed
具体:
我在做一个自动设置输入法环境变量的脚本,因为是用root运行,所以我就想从/etc/passwd里把用户目录给读出来。现在的情况是这样:
[tram@~]$ sed -n '{s/^[^\/]*//;s/\:.*//;p}' /etc/passwd
/root
/home/tram
/home/kde
[tram@~]$
算是得到了每个用户的根目录,但是要怎样才能一个一个的设置呢?因为在运行前,是不知道有几个用户的,是不是能做一循环呢?谢谢!

解答参考:
a,sed
  1. sed -n '{s/^[^\/]*//;s/\:.*//;p}' /etc/passwd
复制代码

b,awk
  1. awk -F: '{print $6}' /etc/passws
复制代码

c,cut
  1. cut -f6 -d: /etc/passwd
复制代码

d,script

  1. #! /bin/bash
  2. #showhome.sh
  3. IFS=:
  4. while read name pass uid gid gecos home shell
  5. do
  6.     echo $home
  7. done
复制代码

执行./showhome.sh < /etc/passwd

2,如何将文本文件的每行做为字符串送入一个变量?
http://www.linuxsir.cn/bbs/showt ... p;highlight=sed+awk
具体:
就是对一行文本送入一个字符串变量,然后下一行再做同样动作,应该是个循坏。目标为了把想要下载的软件放在一个文本中,然后从另一个文本中找本上面这些软件包REQUIRE的其它包,然后生成一个下载列表,让FTP程序安刻列表自动去下载。

解答参考:
如果把一行文本送入一个字符串变量,可以采用直接赋值的方式。如:
AA= "This is a example"
如果要把xxxx.txt文件不同的行赋值给同一个变量,可以用awk:
cat xxxx.txt | awk '{ AA = $0 }'
然后在awk内部加上对AA变量进行处理的函数。

其中将文件中每行赋给一个变量的方法为:
  1. zhyfly@zhyfly:~/bash$ cat 1
  2. xaAsdfasfABC...
  3. 21A32ABC...
  4. xxxxABC...
  5. zhyfly@zhyfly:~/bash$ cat 1|awk '{a[x++]=$0}END{for(i=0;i<NR;i++)print i,a[i]}'
  6. 0 xaAsdfasfABC...
  7. 1 21A32ABC...
  8. 2 xxxxABC...
  9. zhyfly@zhyfly:~/bash$
复制代码


3,如何把汉字变成类似"%AC%5B"的符号?
http://www.linuxsir.cn/bbs/showt ... 3&highlight=sed
具体:
我编bash script程序用wget下载文件,但有些文件名是中文的,必需把这些中文文件名写成这样的格式,如"%AC%A1"。怎样把汉字变成这样的编码呢?多谢!

解答参考利用xxd,tr,sed命令)
我倒是可以把汉字转成encode格式:
xie 0$ echo 论坛 | tr -d "\n" | xxd -i | sed -e "s/ 0x/%/g" | tr -d " ,\n"
%c2%db%cc%b3
大写的:
xie 0$ echo 论坛 | tr -d "\n" | xxd -i | sed -e "s/ 0x/%/g" | tr -d " ,\n" | tr "[a-f]" "[A-F]"
%C2%DB%CC%B3
不过这会把url中允许的正常字符一起编码,所以还要改成只转url中不允许的字符才行。


4,怎样将\n换成换行符??
http://www.linuxsir.cn/bbs/showt ... 4&highlight=sed
具体:
例如有文本如下:
abcd\nabcde
cdef\nmmmini
qqqmad\nnnnnnn

将\n换成换行符后应是:
abcd
abcde
cdef
mmmini
qqqmad
nnnnnn

如何做??

解答参考:
a,直接利用sed

  1. zhyfly@zhyfly:~/bash$ cat escape
  2. abcd\nabcde
  3. cdef\nmmmini
  4. qqqmad\nnnnnnn
  5. zhyfly@zhyfly:~/bash$ cat escape|sed 's/\\n/\
  6. > /g'
  7. abcd
  8. abcde
  9. cdef
  10. mmmini
  11. qqqmad
  12. nnnnnn
  13. zhyfly@zhyfly:~/bash$
复制代码

b,sed后再利用tr
  1. zhyfly@zhyfly:~/bash$ cat escape|sed 's/\\n/@/g'|tr '@' '\n'
复制代码


5, 怎么替换行中的某一不确定字段??
http://www.linuxsir.cn/bbs/showt ... p;highlight=sed+awk
具体:
现有一文本文件.内容如下:
/root/text #mysql
#KILL
/root/big #you
/root/ghg

/root/lll

'用Sed命令.我可以删除"#KILL"和空行.
但是在/root/text后面的#mysql和/root/big后面的#you这两个字段我怎么删除呢??
#mysql和#you是不确定的字段.了就是说#后面可以跟任意的字段名称,而不一定是mysql和you
感觉好像SED就是用来进行行操作的.

解答参考:
  1. zhyfly@zhyfly:~/bash$ cat mysql
  2. /root/text #mysql
  3. #KILL
  4. /root/big #you
  5. /root/ghg

  6. /root/lll
  7. zhyfly@zhyfly:~/bash$ sed 's/#.*//g' mysql #还去掉空行的话就sed -e 's/#.*//g' -e '/^$/d' mysql
  8. /root/text

  9. /root/big
  10. /root/ghg

  11. /root/lll
  12. zhyfly@zhyfly:~/bash$ sed 's/#.*//g' mysql
复制代码
 楼主| 发表于 2005-5-13 23:10:19 | 显示全部楼层
6,如何理解sed -e 's/^\([a-zA-Z]\+\) \([a-zA-Z]\+\)\(.*\)/\2 \1\3/g' file?
http://www.linuxsir.cn/bbs/showt ... p;highlight=sed+awk
解答参考:
首先
加号表示至少匹配一次。

\?等表示引用前面的第?个匹配.

其次
意思如下:
在文件每一行的开始,如果在第一个空格之前只含有英文字符,那么与空格之后的以英文字符开头截止到最后一个英文字符的字符串进行对换,例如
First Second1234....
变为Second First1234....

后面的数字为替代符,顺序代表前面那三个括号里的表达式,1就是第一个括号里的内容,以此类推,那么原有顺序\1 \2\3就被替换为\2 \1\3,所以就是一二表达式替换而已


7,如何删除换行符?
http://www.linuxsir.cn/bbs/showt ... 6&highlight=sed
具体:
我想将几行合并成一行如何删除换行符或回车符??

解答参考:
a,脚本script

  1. #!/bin/bash
  2. for i in `cat file`
  3. do
  4. echo -n $i
  5. done
复制代码

b,sed
  1. echo $(cat file)|sed 's/ //g'
复制代码

c,tr
  1. cat 1|tr -d '\n';echo
复制代码


8,如何求列最大值?
http://www.linuxsir.cn/bbs/showt ... p;highlight=sed+awk
具体:
除了逐行比较,还有什么办法么?
3q
有没有现成的sh

解答参考:
  1. 求tmp文件中第一列中最大值,tmp文件如下:
  2. javalee//home/javalee/lx>cat tmp
  3. 12      343
  4. 534     3445
  5. 4       34
  6. 7765    3
  7. 44      5
  8. 9       9
  9. 3       59
  10. 845     576
  11. 2589    45
  12. 35      9.9
  13. 8i      123
  14. 3       3
  15. 2       3576
  16. 3       856
  17. 4       5
  18. javalee//home/javalee/lx>cat tmp|awk '{print $1}'|sort -n|sed -n '$p'        #执行
  19. 7765        #结果
复制代码

思路:用awk取tmp第一列数据,用sort排序之后(由小到大),用sed显示末行(即排序后最大的数值)


9,如何在AWK里面把数据添加到文件里?
http://www.linuxsir.cn/bbs/showt ... p;highlight=sed+awk
具体:
比如在END块里面把数组内容写到一个文件里面去。

解答参考:
javalee//home/javalee/lx>cat data
Mike Harrington:[510) 548-1278:250:100:175
Christian Dobbins:[408) 538-2358:155:90:201
Susan Dalsass:[206) 654-6279:250:60:50
Archie McNichol:[206) 548-1348:250:100:175
Jody Savage:[206) 548-1278:15:188:150
Guy Quigley:[916) 343-6410:250:100:175
Dan Savage:[406) 298-7744:450:300:275
Nancy McNeil:[206) 548-1278:250:80:75
John Goldenrod:[916) 348-4278:250:100:175
Chet Main:[510) 548-5258:50:95:135
Tom Savage:[408) 926-3456:250:168:200
Elizabeth Stachelin:[916) 440-1763:175:75:300
javalee//home/javalee/lx>awk -F: '{name[x++]=$1};END{for(i=0;i<NR;i++)print i,name}' data >tmp #取文件中$1域中的值作为数组,在输出到文件tmp中
javalee//home/javalee/lx>cat tmp
0 Mike Harrington
1 Christian Dobbins
2 Susan Dalsass
3 Archie McNichol
4 Jody Savage
5 Guy Quigley
6 Dan Savage
7 Nancy McNeil
8 John Goldenrod
9 Chet Main
10 Tom Savage
11 Elizabeth Stachelin


10,提取IP地址进入variable的问题
http://www.linuxsir.cn/bbs/showt ... p;highlight=sed+awk
具体:
我想写一个function,提取IP地址进入variable。但是看过grep和sed都好像还没有找到答案,用awk也不行,因为这一行字并不一定有这样的field格式。

例如
You are browsing from 122.39.123.153 -> 122.39.123.153
So you wanna access 172.20.199.23? -> 172.20.199.23

我现在停留在:
extract=$($source | sed -n '/\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)/p')

解答参考:http://www.linuxsir.cn/bbs/showthread.php?threadid=21008
回复 支持 反对

使用道具 举报

发表于 2005-5-14 05:25:41 | 显示全部楼层
Post by zhy2111314
10,提取IP地址进入variable的问题
http://www.linuxsir.cn/bbs/showt ... p;highlight=sed+awk
具体:
解答参考:http://www.linuxsir.cn/bbs/showthread.php?threadid=21008

对于问题10, 可以再参看这个帖。http://www.linuxsir.cn/bbs/showthread.php?t=195067
回复 支持 反对

使用道具 举报

发表于 2005-5-14 10:46:14 | 显示全部楼层
good
回复 支持 反对

使用道具 举报

发表于 2005-5-14 10:56:16 | 显示全部楼层
好贴  ^
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-16 09:18:09 | 显示全部楼层
11,怎么查找对属主用户可读的文件?
http://www.linuxsir.cn/bbs/showt ... 4&highlight=sed
具体:
关于find 命令的问题.
我发现perm 选项要用三位数,比如 -perm 711 ,如果我不关心group和others的权限,即这个三位数的后两位可为任意数,而对user必须是可执行的(也有可能可读,可写).我该用什么选项呢?
或者我想找出user 的权限位是7,而不关心group和others 的权限,该用什么选项呢?
谢谢.

解答参考:
a,sed
  1. ls -l|sed -n '/^.rwx.*/p'
复制代码

b,find+grep
  1. find . -exec ls -l {} \; |grep ^-rwx
复制代码


12,如何快速把带有大写字母的文件名改为全部小写?
http://www.linuxsir.cn/bbs/showt ... 9&highlight=sed
解答参考:
a,script
vi change_name
  1. #!/bin/bash
  2. for f in *;do
  3. mv $f `echo $f |tr "[A-Z]" "[a-z]"`
  4. done
复制代码

保存后在要转换的目录下执行
sh /path/to/change_name
b,rename
格式
  1. rename source_pattern target_pattern source_files
复制代码


13,怎样在一个文件的特定的地方加入一点东西?
http://www.linuxsir.cn/bbs/showt ... 4&highlight=sed
具体:
比如我有一个文本文件的内容如下

# Multiple FontPath entries are allowed (they are concatenated together)
# By default, Red Hat 6.0 and later now use a font server independent of
# the X server to render fonts.
RgbPath "/usr/X11R6/lib/X11/rgb"
FontPath "unix/:7100"
EndSection

Section "Module"
Load "dbe"
Load "extmod"
Load "fbdevhw"
Load "glx"
Load "record"
Load "freetype"
Load "type1"
Load "dri"

现在我想在上面的红字的下面加入一行 FontPath "/usr/fonts"
那么在shell编程中应该如何操作呢?
还有我想在蓝字的前面加入一个#键又该如何操作呢?

解答参考:sed或者awk
  1. cat add|sed -e '3a\FontPath "/uer/fonts"'
  2. cat add|sed -e 's/Load "freetype"/#&/g'
复制代码


14,怎样在一个文件中读一个值给变量?
http://www.linuxsir.cn/bbs/showt ... 1&highlight=sed
具体:
例如我有一个文件line的内容是: 6 jor
现在我想提取里面的 6 给一个变量 loop 以供它用.
读问怎么样实现?
在SHELL编程下.
我试过 loop=more line 不行
loop=less line 也不行

解答参考:
  1. read loop foo < line
  2. echo $loop
复制代码


15,请问:怎么读出文件中的内容并输出给scp调用?
http://www.linuxsir.cn/bbs/showt ... 8&highlight=sed
具体:
有一批ip地址的列表文件:1.txt、2.txt、3.txt……,文件的内容如下:

$cat 1.txt

211.101.24.xxx
211.101.24.xx
211.100.25.xxx
211.100.25.xxx
...

其它的文件内容也类似,然后我希望实现一个scp操作,就是把某一个文件批量scp到一批服务器上,服务器ip列表从上述文件中的某一个读取
补充:scp是ssh的拷贝命令,用来在两台服务器之间拷贝文件,命令格式如下:
scp 源文件 目标服务器ip:目的路径
举例如下:
$scp /home/guest/a 211.100.25.48:/etc/sysconfig/b.sh
这行命令将本机/home/guest/下的文件a拷贝到远程机器211.100.25.48的/etc/sysconfig/下,并命名成b.sh

解答参考:利用for循环
  1. for i in $(cat 1.txt)
  2. do
  3. scp 源文件 $i 目标路径/文件
  4. done
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-20 10:27:49 | 显示全部楼层
16,指点一下 shell中的 模板替换功能!
http://www.linuxsir.cn/bbs/showt ... 3&highlight=sed
具体:
我想实现一个用模板文件中域的替换功能:
讲不太清楚,看下面的例子:
templete.txt
------------------------------
Hello,<!--name-->!
where are you going?
I want to <!--where-->
------------------------------
以上是要使用的模板,其中有两个域:<!--name--> <!--where-->

我有两个变量: $NAME $WHERE
通过sed 怎么 把这两变量提换到上面的域中,并且输出到标准输出中去?

解答参考:
  1. cat templete.txt|sed -e 1s/\<.*\>/$NAME/g
复制代码


17,sed、awk练习!
http://www.linuxsir.cn/bbs/showt ... 0&highlight=sed
具体:
现有文本文件格式如下:
--------------------------------------------------------------------
#It's a configurefile

Section "SystemCheck"

Package:x-window-system-core
Package:wmaker
Package:locales
Package:defoma
Package:x-ttcidfont-conf
Package:libft-perl
Package:libgtk1.2-common
Package:xlibs-dev

EndSection

Section "SoftwareConfig"

Package:XMMS
Package:Gimp
Package:xchat

EndSection
--------------------------------------------------------------------
要求:将该文件中的两类Package分别读入变量systemlist和softwarelist,各Package名称之间以空格分隔。

即echo $systemlist的结果如下:
x-window-system-core wmaker locales defoma x-ttcidfont-conf libft-perl libgtk1.2-common xlibs-dev

解答参考:
  1. systemlist=`cat sedawk|sed -n '/Section\ "SystemCheck"/,/EndSection/p'|awk -F: '{print $2}'`
复制代码
or
  1. systemlist=$(cat sedawk | sed -ne '/Section "SystemCheck"/,/EndSection/s/\(.*\)Package:\(.*\)/\2/p')
复制代码


18,如何截短一个字符串?
http://www.linuxsir.cn/bbs/showt ... 3&highlight=sed
具体:
做一个批量改名的脚本(练手),碰到一个问题

##########################
#!/bin/sh
#batch file for filename convertion

for file in `ls`
do
mv $file $file.txt
done
##########################

这是一个很简单的改名脚本,就是把.txt加到文件尾而已.
如果要把一个文件名的后缀替换掉,比如
把 "001.rmvb" 改成 "001.rm"
那么怎么处理这个字符串,把.rmvb去掉呢?

解答参考:
  1. ls|sed -e 's/^\(.*\)\.\(.*\)/\1/g'
复制代码

另外截头去尾还可以使用
${variable#characters}
${variable##characters}
${variable%characters}
${variable%%characters}
参考:http://www.linuxsir.cn/bbs/showthread.php?t=180140
http://www.linuxsir.cn/bbs/showthread.php?t=180629

19,取值的问题?
http://www.linuxsir.cn/bbs/showt ... 7&highlight=sed
具体:
有一整数,格式为:12345678,我想把12赋值给A,34赋值给B,5678赋值C,请问用什么命令可以实现?

解答参考:
a,sed
  1. echo $s|sed 's/^\(..\)\(..\)\(.*\)$/\1 \2 \3/'
复制代码

b,cut
  1. echo $s|cut -c1-2
  2. echo $s|cut -c3-4
  3. echo $s|cut -c5-8
复制代码

c,echo ${}
  1. echo ${s:0:2}
  2. echo ${s:2:2}
  3. echo ${s:4:4}
复制代码


20,格式转换shell的问题?
http://www.linuxsir.cn/bbs/showt ... 3&highlight=sed
具体:
1TRF
2PNI
2PDE
1EGR
1ATX
1EPS
1ERG
1PNH
1EFM
1POU
2AT2
1ERP
1BAL
1HPB
2CBH
1SIS
1GAT
7I1B
1CDB
4TRX
1CIS
1TPM
1TFI
2CRD
1HCC
现在想把每一行都变成pdb+上面每一行内容+.Z
例如本来是 1HCC的变成pdb1HCC.Z,这个shell该怎么写啊?

解答参考:
a,sed
  1. cat list|sed 's/\(.*\)/pdb\1\.Z/g'
复制代码

b,
  1. for i in $(cat list);do echo "pdb$i.Z";done>tmp;rm list;mv tmp list
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-25 12:01:52 | 显示全部楼层
21,如何用shell去处文件里特定的行?
http://www.linuxsir.cn/bbs/showt ... 9&highlight=sed
具体:
例如
25%gfdghfhghgh

qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq

25%gfdkgjfkjgjkkk

qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq

25%agdfgdfgfdgg

qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
我该怎么做才能把25%开始的那行和下面的一个空行去掉?

解答参考:
a,sed
  1. cat tmp|sed -e '/^25%/d' -e '/^$/d'
复制代码

b,删除空行的方法:
  1. sed '/^$/d' file
  2. tr -s "\n" file
  3. for i in $(cat file);do echo $i;done
复制代码


22,sed替换功能中变量如何表示?
http://www.linuxsir.cn/bbs/showt ... 2&highlight=sed
具体:
脚本如下:
#!/bin/bash

IP1=`cat /tmp/ip1`
IP2=`cat /tmp/ip2`

sed -e 's/$IP1/$IP2/g' /tmp/test.txt

此脚本未把/tmp/test.txt文件中的包含/tmp/ip1的内容字符替换为/tmp/ip2中的字符

解答参考:
  1. sed -e s/${IP1}/${IP2}/g /tmp/test.txt
复制代码


23,怎么把大写子母转换成小写?
http://www.linuxsir.cn/bbs/showt ... 2&highlight=sed
具体:
pdb1TRF.ent.Z
pdb2PNI.ent.Z
Apdb2PDE.ent.Z
pZdb1EGR.ent.Z
pdb1ATX.ent.Z
pdb1EPS.ent.Z
pdb1ERG.ent.Z
pdb1PNH.ent.Z
pdb1EFM.ent.Z
pdb1POU.ent.Z
pdb2AT2.ent.Z
Zpdb1ERP.ent.Z
Zpdb1BAL.ent.Z
需要把里面除最后的Z以外的大写子母改成小写该怎么实现?

解答参考:
a,sed
  1. cat tmp|tr A-Z a-z|sed 's/z$/Z/g'
复制代码

b,
  1. for i in $(cat tmp|awk -F. '{print $1"."$2}');do echo "$(echo $i|tr A-Z a-z).Z";done
复制代码


24,我要实现这个功能该怎么做?
http://www.linuxsir.cn/bbs/showt ... 5&highlight=sed
具体:
我的家目录有一个Develop目录
1.我想将该目录下面的所有java文件选出
2.找到作者是我的文件(@author jimmy)
3.最后在这些文件中搜索所有包含有Hashmap的行
(当然也可以考虑直接将他改为HashMap)

我是这么做的,
find /home/jimmy/Develop -name "*java*" -exec grep jimmy -l {} \;
这么做的结果是完成了前两步.输出如下
/home/jimmy/Develop/Users.java
/home/jimmy/Develop/Services.java
/home/jimmy/Develop/Status.java

我想使用:
find /home/jimmy/Develop -name "*java*" -exec grep jimmy -l {} \; | grep Hashmap -n
却行不通

解答参考:
  1. grep Hashmap -n `find /home/jimmy/Develop -exec grep jimmy -l {} \;`
复制代码
  1. ls -l|grep username|find . -name "filename"|xargs grep -l "string"
复制代码
  1. sed -ne 's/Hashmap/HashMap/gp' `find /home/jimmy/Develop -exec grep jimmy -l {} \;`
复制代码


25,怎样转换以下文档??
http://www.linuxsir.cn/bbs/showt ... 4&highlight=sed
具体:
转换以下文档:

Joey: What, like there's a rule or something?

(The door buzzer sounds and Chandler gets it.)

Chandler: Please don't do that again, it's a horrible sound.

Paul: (over the intercom) It's, uh, it's Paul.

Monica: Oh God, is it 6:30? Buzz him in!

Joey: Who's Paul?

转换成:

{\bf Joey:} What, like there's a rule or something?

(The door buzzer sounds and Chandler gets it.)

{\bf Chandler:} Please don't do that again, it's a horrible sound.

{\bf Paul:} (over the intercom) It's, uh, it's Paul.

{\bf Monica:} Oh God, is it 6:30? Buzz him in!

{\bf Joey:} Who's Paul?

解答参考:
  1. cat tmp|sed 's/^\([[:alpha:]]*:\)/{\\bf\ \1}/g'
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-4 15:09:14 | 显示全部楼层
26,请问如何统计一个文件中某个模式出现的次数??
http://www.linuxsir.cn/bbs/showt ... 8&highlight=sed
解答参考:grep tr
  1. cat file|tr " " "\n"|grep -wc "matchpattern"
复制代码


27,求一Shell能够将文本文件中以特定字符串搜索到的行和它的下一行显示出来。
http://www.linuxsir.cn/bbs/showt ... 8&highlight=sed
解答参考:
a,sed
  1. sed -n '/pattern/{N;p}' file
复制代码

b,grep
  1. grep -A1 'pattern' file
复制代码


28,如何将一个输出中的若干行分别赋值给变量?
http://www.linuxsir.cn/bbs/showt ... 6&highlight=sed
具体:
比如一个命令输出里面有3行
a
bbb
ccccccc

分别赋值给变量a1,a2,a3,可以么?如果输出更多,创建的变量也相应越多?

还有,如何读取一个文本文件中的若干行呢,和上面一样,分别赋值,可以么?

解答参考:
  1. for i in $(cat file);do eval a$n=$i;((n+=1)); done
复制代码


29,有一批文件,里面都有共同内容的一行文本,能编一个脚本,把它们都删除吗?
http://www.linuxsir.cn/bbs/showt ... 0&highlight=sed
具体:
是这样的,有一个学习php4的.chm格式的文件,因在Linux下无法看,我在WIN下用反编译工具保存为*.html格式。由于反编译工具未注册,这样生成的*.html文件里面都有一行提示,原文件内容如下:
<br> This file is decompiled by an unregistered version of ChmDecompiler.<br> Regsitered version does not show this message. <br>You can download ChmDecompiler at : <a href="http://www.etextwizard.com/" target=_blank>http://www.etextwizard.com/</a><br><br>
我想把所有这些文件内的上述提示去掉,用脚本能做到吗,应怎样实现,还有更好的方法吗?

解答参考:
scirpt:
  1. #!/bin/bash
  2. for file in *.html
  3. do
  4. sed -e '/This file is decompiled/d' > temp
  5. rm $file
  6. mv temp $file
  7. done
复制代码


30,如何在sed的command中使用变量?
http://www.linuxsir.cn/bbs/showt ... 6&highlight=sed
具体:
sed '/aa/s/abc/arg/' filename
这个命令是用来替换文本的,但是我想问,如果在这条语句的前面有一个变量,我想用这个变量的值来替换文件中的满足条件的字符串,用sed如何来做?因为在单引号中的变量不能替换。
如果用sed不行,是否还有取代的办法?

解答参考:假设arg为变量
  1. sed /aa/s/abc/$arg/ filename
  2. sed '/aa/s/abc/'$arg'/' filename
  3. sed "/aa/s/abc/$arg/" filename
复制代码

tr
  1. $var=newstr
  2. $cat urfile|tr oldstr $var
复制代码
回复 支持 反对

使用道具 举报

发表于 2006-9-28 16:31:14 | 显示全部楼层

很好

希望这样的总结性的文章多一些
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表