我在作一个自动设置输入法环境变量的脚本,由于是用
root
运行,因此我就想从
/etc/passwd
里把用户目录给读出来。如今的状况是这样:
[tram@~]$ sed -n '{s/^[^\/]*//;s/\:.*//;p}' /etc/passwd /root /home/tram /home/kde [tram@~]$ 算是获得了每一个用户的根目录,可是要怎样才能一个一个的设置呢?由于在运行前,是不知道有几个用户的,是否是能作一循环呢?谢谢! |
就是对一行文本送入一个字符串变量,而后下一行再作一样动做,应该是个循坏。目标为了把想要下载的软件放在一个文本中,而后从另外一个文本中找本上面这些软件包
REQUIRE
的其它包,而后生成一个下载列表,让
FTP
程序安刻列表自动去下载。
|
若是把一行文本送入一个字符串变量,能够采用直接赋值的方式。如:
AA= "This is a example" 若是要把 xxxx.txt 文件不一样的行赋值给同一个变量,能够用 awk : cat xxxx.txt | awk '{ AA = $0 }' 而后在 awk 内部加上对 AA 变量进行处理的函数。 |
我编
bash script
程序用
wget
下载文件,但有些文件名是中文的,必需把这些中文文件名写成这样的格式,如
"%AC%A1"
。怎样把汉字变成这样的编码呢?多谢!
|
我却是能够把汉字转成
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 中不容许的字符才行。 |
例若有文本以下:
abcd\nabcde cdef\nmmmini qqqmad\nnnnnnn 将 \n 换成换行符后应是: abcd abcde cdef mmmini qqqmad nnnnnn 如何作?? |
现有一文本文件
.
内容以下
: /root/text #mysql #KILL /root/big #you /root/ghg /root/lll ' 用 Sed 命令 . 我能够删除 "#KILL" 和空行 . 可是在 /root/text 后面的 #mysql 和 /root/big 后面的 #you 这两个字段我怎么删除呢 ?? #mysql 和 #you 是不肯定的字段 . 了就是说 # 后面能够跟任意的字段名称 , 而不必定是 mysql 和 you 感受好像 SED 就是用来进行行操做的 . |
加号表示至少匹配一次。
\? 等表示引用前面的第 ? 个匹配 . |
意思以下:
在文件每一行的开始,若是在第一个空格以前只含有英文字符,那么与空格以后的以英文字符开头截止到最后一个英文字符的字符串进行对换,例如 First Second1234.... 变为 Second First1234.... 后面的数字为替代符,顺序表明前面那三个括号里的表达式, 1 就是第一个括号里的内容,以此类推,那么原有顺序 \1 \2\3 就被替换为 \2 \1\3 ,因此就是一二表达式替换而已 |
我想将几行合并成一行如何删除换行符或回车符??
|
除了逐行比较
,
还有什么办法么
? 3q 有没有现成的 sh |
代码
:
求tmp文件中第一列中最大值,tmp文件以下:
javalee//home/javalee/lx>cat tmp
12 343
534 3445
4 34
7765 3
44 5
9 9
3 59
845 576
2589 45
35 9.9
8i 123
3 3
2 3576
3 856
4 5
javalee//home/javalee/lx>cat tmp|awk '{print $1}'|sort -n|sed -n '$p' #
执行
7765 #
结果
思路
:
用
awk
取
tmp
第一列数据
,
用
sort
排序以后
(
由小到大
),
用
sed
显示末行
(
即排序后最大的数值
)
|
好比在
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[i]}' 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 |
我想写一个
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') |
关于
find
命令的问题
. 我发现 perm 选项要用三位数 , 好比 -perm 711 , 若是我不关心 group 和 others 的权限 , 即这个三位数的后两位可为任意数 , 而对 user 必须是可执行的 ( 也有可能可读 , 可写 ). 我该用什么选项呢 ? 或者我想找出 user 的权限位是 7, 而不关心 group 和 others 的权限 , 该用什么选项呢 ? 谢谢 . |
好比我有一个文本文件的内容以下
# 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 编程中应该如何操做呢? 还有我想在蓝字的前面加入一个 # 键又该如何操做呢? |
例如我有一个文件
line
的内容是
: 6 jor 如今我想提取里面的 6 给一个变量 loop 以供它用 . 读问怎么样实现 ? 在 SHELL 编程下 . 我试过 loop=more line 不行 loop=less line 也不行 |
有一批
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 |
我想实现一个用模板文件中域的替换功能:
讲不太清楚,看下面的例子: templete.txt ------------------------------ Hello,<!--name-->! where are you going? I want to <!--where--> ------------------------------ 以上是要使用的模板,其中有两个域: <!--name--> <!--where--> 我有两个变量: $NAME $WHERE 经过 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 |
作一个批量更名的脚本(练手),碰到一个问题
########################## #!/bin/sh #batch file for filename convertion for file in `ls` do mv $file $file.txt done ########################## 这是一个很简单的更名脚本,就是把 .txt 加到文件尾而已 . 若是要把一个文件名的后缀替换掉,好比 把 "001.rmvb" 改为 "001.rm" 那么怎么处理这个字符串,把 .rmvb 去掉呢 ? |
有一整数,格式为:
12345678
,我想把
12
赋值给
A
,
34
赋值给
B
,
5678
赋值
C
,请问用什么命令能够实现?
|
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 该怎么写啊? |
例如
25%gfdghfhghgh qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq 25%gfdkgjfkjgjkkk qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq 25%agdfgdfgfdgg qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq 我该怎么作才能把 25% 开始的那行和下面的一个空行去掉? |
脚本以下:
#!/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 中的字符 |
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 之外的大写子母改为小写该怎么实现? |
个人家目录有一个
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 却行不通 |
转换如下文档
: 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? |
好比一个命令输出里面有
3
行
a bbb ccccccc 分别赋值给变量 a1,a2,a3 ,能够么?若是输出更多,建立的变量也相应越多? 还有,如何读取一个文本文件中的若干行呢,和上面同样,分别赋值,能够么? |
是这样的,有一个学习
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> 我想把全部这些文件内的上述提示去掉,用脚本能作到吗,应怎样实现,还有更好的方法吗 ? |
sed '/aa/s/abc/arg/' filename 这个命令是用来替换文本的,可是我想问,若是在这条语句的前面有一个变量,我想用这个变量的值来替换文件中的知足条件的字符串,用 sed 如何来作?由于在单引号中的变量不能替换。 若是用 sed 不行,是否还有取代的办法? |