shell腳本sed變數
① shell 中用sed作替換操作怎麼使用變數
用雙引號就行了(單引號會屏蔽
$
對shell變數的取值功能)
sed
"s/$bsed/$a/g"
filename
>result
② shell的sed用法
sed 是Unix中類似於awk的行編輯器,對於sed工具包的所有操作來說, 我們最關心的其實就是3個最主要的操作. 分別是printing(列印到stdout), deletion(刪除), 和substitution(替換). 它與awk不同的地方在於sed是非交互的編輯器,而awk是可交互的編輯器。它即可以從stdin中接收文本輸入, 也可以從文件中接收文本輸入, 它對輸入中的指定行進行特定的操作, 一行操作一次, 然後將結果輸出到stdout, 或輸出到文件中. 在shell腳本中使用的話, sed通常都是作為管道工具鏈中的一個處理部分來使用.
Sed的處理方法,上面你提到的表達式叫作「模式匹配」,是一種替換操作:
s/pattern1/pattern2/
意思是用 pattern2 替換pattern1並顯示到屏幕上。
講講echo "uid=100(guest) gid=100(others) groups=10(users),11(floppy)"|sed 's/^[^(]*(\([^)]*\).*/\1/'的意思 :
echo 是向屏幕顯示一行字元
「|」叫管道,象水管一樣把「|」前面程序產生的輸出作為「|」後的程序的輸入。
sed 行編輯器。
's/^[^(]*(\([^)]*\).*/\1/' 對應上文提到的替換參數,分成兩部分,pattern1:/^[^(]*(\([^)]*\).*/
表示以不是以「(」開始的字元後面跟任意字元,然後是貪婪匹配模式運算(),任意以「(」字元開始,中間不包括")"字元的任意字元並以「)」後接。後面再接任意字元串。因為前面的程序輸出「uid=100(guest) gid=100(others) groups=10(users),11(floppy)」,所以貪婪匹配模式得到結果(guest)
pattern2:/\1/ \1是正則表達式的貪婪匹配模式運算結果。
所以shell語句輸出guest替換長長的一串「uid=100(guest) gid=100(others) groups=10(users),11(floppy)」
③ shell腳本如何判斷變數為數字
#!/bin/bash
##
方法1
a=1234;echo
"$a"|[
-n
"`sed
-n
'/^[0-9][0-9]*$/p'`"
]
&&
echo
string
a
is
numbers
第一個-n是shell的測試標志,對後面的串"`sed
-n
'/^[0-9][0-9]*$/p'`"
進行測試,如果非空,則結果為真。
sed默認會顯示所有輸入行信息的,sed
的「-n」選項是讓sed不要顯示,而只顯示我們所需要的內容:即後面的表達式所匹配的行,這是通過表達式中加入「p」命令來實現的。
/^[0-9][0-9]*$/他的含義是匹配至少由一位數字構成的行
##
方法2,
可以,不過不是bash實現的,是使用了grep的正則
#if
grep
'^[[:digit:]]*$'
<<<
"$1";then
#
echo
"$1
is
number."
#else
#
echo
'no.'
#fi
##
方法3
#if
[
"$1"
-gt
0
]
2>/dev/null
;then
#
echo
"$1
is
number."
#else
#
echo
'no.'
#fi
##
方法4,case
#case
"$1"
in
#
[1-9][0-9]*)
#
echo
"$1
is
number."
#
;;
#
*)
#
;;
#esac
##
方法5,awk
#echo
$1|
awk
'{print($0~/^[-]?([0-9])+[.]?([0-9])+$/)?"number":"string"}'
##
方法5,awk
#if
[
-n
"$(echo
$1|
sed
-n
"/^[0-9]\+$/p")"
];then
#
echo
"$1
is
number."
#else
#
echo
'no.'
#fi
##
方法6,expr
expr
$1
"+"
10
&>
/dev/null
if
[
$?
-eq
0
];then
echo
"$1
is
number"
else
echo
"$1
not
number"
fi
④ shell腳本 將一個含特殊字元的變數,寫入文件對應的位置中,使用sed要麼寫入的字元不正確要麼就報錯
假如SSID變數中沒有&這個特殊符號,那麼直接用sed是可以滿足的
SSID='~!@#$%^*[}(/.*\/'
sed-is,ssid=.*,ssid=$SSID,gfilename
但是如果有了&符號,放到sed中會作為特殊用途展開,導致保留了原來的匹配字元,寫入的內容會不正確。
此時,只能換一種方式,用awk來操作字元串,然後重新寫入到文件中,此時需要多一個臨時文件
cpfilenamefilename1;
awk'{gsub("^ssid=.*","ssid='$SSID'");print$0}'filename1>filename;
rm-ffilename1
⑤ shell sed命令刪除指定行,匹配字元用變數替代,變數包含"/"和" "
改成這樣就可以了:
A="\/usr\/sbin\/control.sh --start"
sed -i "/$A/d" cmd.cfg
⑥ 如果在sed命令使用環境變數
1、sed命令使用雙引號的情況下,可以使用$var(變數)直接引用:
echo
|
sed
"s/^/$RANDOM.rmvb_/g"
13562.rmvb_
2、sed命令使用單引號的情況下,可以使用'"$var"'引用(單引號,然後雙引號,變數):
echo
|
sed
's/^/'"$RANDOM"'.rmvb_/g'
2442.rmvb_
sed中執行外部命令。
1、sed命令使用單引號的情況下使用'`shell
command`'或者'$(shell
command)'引用命令執行的結果:
echo
|
sed
's/^/'`echo
$RANDOM`'.rmvb_/g'
7700.rmvb_#
結果
#
上面的命令使用了舊式的命令替換,也可以採用新式的命令替換方法,如下:
echo
|
sed
's/^/'$(echo
$RANDOM)'.rmvb_/g'
13856.rmvb_#
結果
#
下面例子取用當前日期作為結果的一部分,如下:
echo
|
sed
's/^/'$(date
+"%Y%m%d")'.rmvb_/g'
20130401.rmvb_
#
結果
2、sed命令中使用雙引號的情況下,直接`shell
command`或者$(shell
command)引用命令執行。
echo
|
sed
"s/^/$(date
+"%Y%m%d").rmvb_/g"
20130401.rmvb_#
結果
#
使用環境變數$RANDOM以及舊式命令替換的例子:
echo
|
sed
"s/^/`echo
$RANDOM`.rmvb_/g"
29484.rmvb_#
結果
總結一下
在sed語句裡面,變數替換或者執行shell命令,雙引號比單引號少繞一些彎子;所以,sed和變數的關鍵詞搜索的結果,眾多都寫上替換單引號為雙引號。
⑦ shell腳本sed命令如何使用變數替換掉包含指定字元串的整行
#先將包含指定字元串的整行列印到變數tmp
tmp=$(sed -n '/${zip}/p' 文本名)
#然後將文本中這一整行字元串替換為你想要修改的字元串
sed -i 's/${tmp}/${zip}/g' 文本名
⑧ sed如何將一個變數替換另一個變數
1、sed命令使用雙引號的情況下,可以使用$var(變數)直接引用:
echo | sed "s/^/$RANDOM.rmvb_/g"
13562.rmvb_
2、sed命令使用單引號的情況下,可以使用'"$var"'引用(單引號,然後雙引號,變數):
echo | sed 's/^/'"$RANDOM"'.rmvb_/g'
2442.rmvb_
sed中執行外部命令。
1、sed命令使用單引號的情況下使用'`shell command`'或者'$(shell command)'引用命令執行的結果:
echo | sed 's/^/'`echo $RANDOM`'.rmvb_/g'
7700.rmvb_# 結果
# 上面的命令使用了舊式的命令替換,也可以採用新式的命令替換方法,如下:
echo | sed 's/^/'$(echo $RANDOM)'.rmvb_/g'
13856.rmvb_# 結果
# 下面例子取用當前日期作為結果的一部分,如下:
echo | sed 's/^/'$(date +"%Y%m%d")'.rmvb_/g'
20130401.rmvb_ # 結果
2、sed命令中使用雙引號的情況下,直接`shell command`或者$(shell command)引用命令執行。
echo | sed "s/^/$(date +"%Y%m%d").rmvb_/g"
20130401.rmvb_# 結果
# 使用環境變數$RANDOM以及舊式命令替換的例子:
echo | sed "s/^/`echo $RANDOM`.rmvb_/g"
29484.rmvb_# 結果
總結一下
在sed語句裡面,變數替換或者執行shell命令,雙引號比單引號少繞一些彎子;所以,sed和變數的關鍵詞搜索的結果,眾多都寫上替換單引號為雙引號。
⑨ sed怎麼添加行變數表示
1.sed命令使用單引號的情況下,可以使用'"$var"'引用(單引號,然後雙引號,變數):
2.sed命令中使用雙引號的情況下,直接`shell command`或者$(shell command)引用命令執行。
⑩ shell腳本怎樣讀取文件的值,並賦值給變數
在sell腳本中,讀取鍵盤輸入的內容並將其賦值給shell變數的命令為:
read -p "input a val:" val echo $val
read - 從標准輸入讀取數值。這個 read 內部命令被用來從標准輸入讀取單行數據。這個命令可以用來讀取鍵盤輸入,當使用 重定向的時候,讀取文件中的一行數據。
它的語法形式一般是:
read [-options] [variable...]
(10)shell腳本sed變數擴展閱讀:
Shell是一種腳本語言,常見的腳本解釋器有:
bash:是Linux標准默認的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的縮寫,內部命令一共有40個。
sh: 由Steve Bourne開發,是Bourne Shell的縮寫,sh 是Unix 標准默認的shell。