awk
awk這個指令,可以用來處理字串,他的用法可以針對你想找的"符號"或"字串",來做切割然後可以單獨的取出,awk 使用說明如下
awk -F'要找的字符' '{print $1}'
舉個實際例子,假設有個字串 => str="danny:12345:man"
那我現在想要取出danny,該怎麼做呢? 使用awk可以很簡的把他取出來
你只需下這段指令:
echo $str | awk -F':' '{print $1}'
如果要取出12345,
echo $str | awk -F':' '{print $2}'
如果要取出man,
echo $str | awk -F':' '{print $3}'
如果是要取最後,也可以使用
echo $str | awk -F':' '{print $NF}'
取倒數第二,寫法是
echo $str | awk -F':' '{print $(NF-1)}'
echo $str | awk -F':' '{print $(NF-1)}'
sed
sed指令可以用來針對字串作以下功能
1.以行為單位的新增/刪除
2.以行為單位的取代與顯示
3.部分資料的搜尋並取代的功能
假設現在有一個檔案,名為hello,他的內容如下:
1.以行為單位的新增/刪除
(新增)我要印出hello的內容,並在第3行後面(也就是第四行)新增一些文字,作法如下:
cat hello | sed '3a danny'
(刪除)我要印出hello的內容,並刪除2~5行,作法如下:
cat hello | sed '2,5d'
2.以行為單位的取代與顯示
(取代)我要把2~5行取代為別的內容,作法如下:
cat hello | sed '2,5c HHHHHHHHHHH'
(顯示)我只要顯示2~5行的內容,作法如下:
cat hello | sed -n '2,5p'
另外補充 sed 帶入變數的取某一行的方法
例如我有個變數$count="2"
我要用這個變數來取第二行,作法如下:
sed -n "${count}p" ==> 等同於 sed -n "2p"
例如我有個變數$count="2"
我要用這個變數來取第二行,作法如下:
sed -n "${count}p" ==> 等同於 sed -n "2p"
3.部分資料的搜尋並取代的功能
作法如下:
sed 's/要被取代的字串/新的字串/g'
例如有個字串 => str="@danny",假設我想要改成 "Hi danny",作法如下:
echo $str | sed 's/@/Hi /g'
假設我只想要改成"danny",作法如下:
echo $str | sed 's/@//g'
另外補充 sed 帶入變數的取代法
假設我有有個字串 => str="0.1.20180709", 我有個變數 $Date="20180709",
現在我要把str後面的".20180709"去掉, 作法如下:
echo $str | sed "s/.$Date//g"
最後附上一個shell script範例,此範例是從一個json格式的字串中截取出user_name, passwd然後再透過smbpasswd指令去更改Samba的密碼
=================== test.sh ==========================
#!/bin/sh
input='{"user":"danny","passwd":"1234"}'
user_name=$(echo $input | awk -F',' '{print $1}' | awk -F':' '{print $2}' | sed 's/"//g')
passwd=$(echo $input | awk -F',' '{print $2}' | awk -F':' '{print $2}' | sed 's/"//g' | sed 's/}//g' )
printf "$passwd\n$passwd\n" | smbpasswd -a -s "$user_name" > /dev/null
==================================================
沒有留言:
張貼留言