我在作一個自動設置輸入法環境變量的腳本,由於是用
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 不行,是否還有取代的辦法? |