Crazylinux工作室出自:crazylinux工作室网址:时间:2010.10.13转载请保留此信息-------------------------------AWKSED作者:L。JE-mail:lijie2402@gmail.com1,怎样处理用户名?(怎样从/etc/passwd中把用户目录读出来?)引用:我在做一个自动设置输入法环境变量的脚本,因为是用root运行,所以我就想从/etc/passwd里把用户目录给读出来。现在的情况是这样:[tram@~]$sed-n'{s/^[^\/]*//;s/\:.*//;p}'/etc/passwd/root/home/tram/home/kde[tram@~]$算是得到了每个用户的根目录,但是要怎样才能一个一个的设置呢?因为在运行前,是不知道有几个用户的,是不是能做一循环呢?谢谢!解答参考:a,sed代码:sed-n'{s/^[^\/]*//;s/\:.*//;p}'/etc/passwdb,awk代码:awk-F:'{print$6}'/etc/passwsc,cut代码:cut-f6-d:/etc/passwdd,script代码:#!/bin/bash#showhome.shIFS=:whilereadnamepassuidgidgecoshomeshelldoecho$homedone发展开源精神,普及Linux教育Crazylinux工作室网址:发展开源精神,普及Linux教育Crazylinux工作室网址:执行./showhome.sh/etc/passwd2,如何将文本文件的每行做为字符串送入一个变量?引用:就是对一行文本送入一个字符串变量,然后下一行再做同样动作,应该是个循坏。目标为了把想要下载的软件放在一个文本中,然后从另一个文本中找本上面这些软件包REQUIRE的其它包,然后生成一个下载列表,让FTP程序安刻列表自动去下载。解答参考:引用:如果把一行文本送入一个字符串变量,可以采用直接赋值的方式。如:AA=Thisisaexample如果要把xxxx.txt文件不同的行赋值给同一个变量,可以用awk:catxxxx.txt|awk'{AA=$0}'然后在awk内部加上对AA变量进行处理的函数。其中将文件中每行赋给一个变量的方法为:代码:zhyfly@zhyfly:~/bash$cat1xaAsdfasfABC...21A32ABC...xxxxABC...zhyfly@zhyfly:~/bash$cat1|awk'{a[x++]=$0}END{for(i=0;iNR;i++)printi,a[i]}'0xaAsdfasfABC...121A32ABC...2xxxxABC...zhyfly@zhyfly:~/bash$3,如何把汉字变成类似%AC%5B的符号?引用:我编bashscript程序用wget下载文件,但有些文件名是中文的,必需把这些中文文件名写成这样的格式,如%AC%A1。怎样把汉字变成这样的编码呢?多谢!解答参考:(利用xxd,tr,sed命令)引用:我倒是可以把汉字转成encode格式:xie0$echo论坛|tr-d\n|xxd-i|sed-es/0x/%/g|tr-d,\n%c2%db%cc%b3大写的:xie0$echo论坛|tr-d\n|xxd-i|sed-es/0x/%/g|tr-d,\n|tr[a-f][A-F]%C2%DB%CC%B3不过这会把url中允许的正常字符一起编码,所以还要改成只转url中不允许的字符才行。4,怎样将\n换成换行符??引用:Crazylinux工作室发展开源精神,普及Linux教育Crazylinux工作室网址:例如有文本如下:abcd\nabcdecdef\nmmminiqqqmad\nnnnnnn将\n换成换行符后应是:abcdabcdecdefmmminiqqqmadnnnnnn如何做??解答参考:a,直接利用sed代码:zhyfly@zhyfly:~/bash$catescapeabcd\nabcdecdef\nmmminiqqqmad\nnnnnnnzhyfly@zhyfly:~/bash$catescape|sed's/\\n/\/g'abcdabcdecdefmmminiqqqmadnnnnnnzhyfly@zhyfly:~/bash$b,sed后再利用tr代码:zhyfly@zhyfly:~/bash$catescape|sed's/\\n/@/g'|tr'@''\n'5,怎么替换行中的某一不确定字段??引用:现有一文本文件.内容如下:/root/text#mysql#KILL/root/big#you/root/ghg/root/lllCrazylinux工作室发展开源精神,普及Linux教育Crazylinux工作室网址:用Sed命令.我可以删除#KILL和空行.但是在/root/text后面的#mysql和/root/big后面的#you这两个字段我怎么删除呢??#mysql和#you是不确定的字段.了就是说#后面可以跟任意的字段名称,而不一定是mysql和you感觉好像SED就是用来进行行操作的.解答参考:代码:zhyfly@zhyfly:~/bash$catmysql/root/text#mysql#KILL/root/big#you/root/ghg/root/lllzhyfly@zhyfly:~/bash$sed's/#.*//g'mysql#还去掉空行的话就sed-e's/#.*//g'-e'/^$/d'mysql/root/text/root/big/root/ghg/root/lllzhyfly@zhyfly:~/bash$sed's/#.*//g'mysql6,如何理解sed-e's/^\([a-zA-Z]\+\)\([a-zA-Z]\+\)\(.*\)/\2\1\3/g'file?解答参考:首先引用:加号表示至少匹配一次。\?等表示引用前面的第?个匹配.其次引用:意思如下:在文件每一行的开始,如果在第一个空格之前只含有英文字符,那么与空格之后的以英文字符开头截止到昀后一个英文字符的字符串进行对换,例如FirstSecond1234....变为SecondFirst1234....后面的数字为替代符,顺序代表前面那三个括号里的表达式,1就是第一个括号里的内容,以此类推,那么原有顺序\1\2\3就被替换为\2\1\3,所以就是一二表达式替换而已7,如何删除换行符?引用:Crazylinux工作室发展开源精神,普及Linux教育Crazylinux工作室网址:我想将几行合并成一行如何删除换行符或回车符??解答参考:a,脚本script代码:#!/bin/bashforiin`catfile`doecho-n$idoneb,sed代码:echo$(catfile)|sed's///g'c,tr代码:cat1|tr-d'\n';echo8,如何求列昀大值?具体:引用:除了逐行比较,还有什么办法么?3q有没有现成的sh解答参考:引用:代码:求tmp文件中第一列中昀大值,tmp文件如下:javalee//home/javalee/lxcattmp1234353434454347765344599359845576258945359.98i12333235763856Crazylinux工作室发展开源精神,普及Linux教育Crazylinux工作室网址:|awk'{print$1}'|sort-n|sed-n'$p'7765#结果思路:用awk取tmp第一列数据,用sort排序之后(由小到大),用sed显示末行(即排序后昀大的数值)9,如何在AWK里面把数据添加到文件里?引用:比如在END块里面把数组内容写到一个文件里面去。解答参考:引用:javalee//home/javalee/lxcatdataMikeHarrington:[510)548-1278:250:100:175ChristianDobbins:[408)538-2358:155:90:201SusanDalsass:[206)654-6279:250:60:50ArchieMcNichol:[206)548-1348:250:100:175JodySavage:[206)548-1278:15:188:150GuyQuigley:[916)343-6410:250:100:175DanSavage:[406)298-7744:450:300:275NancyMcNeil:[206)548-1278:250:80:75JohnGoldenrod:[916)348-4278:250:100:175ChetMain:[510)548-5258:50:95:135TomSavage:[408)926-3456:250:168:200ElizabethStachelin:[916)440-1763:175:75:300javalee//home/javalee/lxawk-F:'{name[x++]=$1};END{for(i=0;iNR;i++)printi,name[i]}'datatmp#取文件中$1域中的值作为数组,在输出到文件tmp中javalee//home/javalee/lxcattmp0MikeHarrington1ChristianDobbins2SusanDalsass3ArchieMcNichol4JodySavage5GuyQuigley6DanSavage7NancyMcNeil8JohnGoldenrod9ChetMain10TomSavage11ElizabethStachelin10,提取IP地址进入variable的问题引用:我想写一个function,提取IP地址进入variable。但是看过grep和sed都好像还没有找到答案,用awk也不行,因为这一行字并不一定有这样的field格式。Crazylinux工作室发展开源精神,普及Linux教育Crazylinux工作室网址:我现在停留在:extract=$($source|sed-n'/\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)/p')11,怎么查找对属主用户可读的文件?引用:关于find命令的问题.我发现perm选项要用三位数,比如-perm711,如果我不关心group和others的权限,即这个三位数的后两位可为任意数,而对user必须是可执行的(也有可能可读,可写).我该用什么选项呢?或者我想找出user的权限位是7,而不关心group和others的权限,该