當前位置:首頁 » 網頁前端 » 黑馬shell腳本sed
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

黑馬shell腳本sed

發布時間: 2022-07-18 02:12:31

⑴ shell腳本sed命令如何使用變數替換掉包含指定字元串的整行

#先將包含指定字元串的整行列印到變數tmp
tmp=$(sed -n '/${zip}/p' 文本名)
#然後將文本中這一整行字元串替換為你想要修改的字元串
sed -i 's/${tmp}/${zip}/g' 文本名

⑵ shell腳本sed替換命令的問題,求高手回答一下 謝謝啊

1)cata.config|grep"^name"累贅,直接寫為grep"^name"a.config

2)>>/dev/null,不需要>>,直接>就可以,即使輸出可能是多行內容,也可以作為一個整體。

3)=前後有空格的話,將"="(=前後加上了空格)設為欄位分隔符就可以了。

awk -F' = ' "{print $2}"

當然,最好的做法是用集合[= ],這樣=和空格都可以作為分隔符,而且無論=左右有幾個空格都可以處理。awk -F'[= ]' "{print $NF}" ,awk內置變數NF表示欄位數,$NF就可以取出最後一個欄位。

4)sed"s/"${name_test}"/"cat"/"a.config可以再簡單些:sed"s/${name_test}/cat/"a.config

不過,你要做替換,直接awk就可以完成了,何必awk加sed呢;此外,grep的結果保存下來,就不用做兩次了。

output=`grep"^name"a.config`
[-n"$output"]&&echo"$output"|awk'{$NF="cat";print}'

分隔符都不用設置,直接用默認的就可以。

⑶ 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如何在鍵盤上獲取值

read -p "Please input: " var # 讀鍵盤輸入存放到變數var
echo "$var" | sed '...(此處略)...'

⑸ 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中執行sed命令

直接命令
xxx> cat 28.txt
book
xxx> sed 's/book/books/g' 28.txt
books
放入腳本中
xxx> cat 46.sh
sed 's/book/books/g' 28.txt
xxx> ./46.sh
books

並沒有你說的情況,替換那麼多S

⑺ shell中sed問題

不知道你是神馬邏輯,變數都是賦值,那有你這么替換的。按照你的思路。

應該是往腳本里添加一個JOB_NAME變數的值,如果BBB.txt含有JOB_NAME這個變數
你可以直接匹配JOB_NAME修改後邊的值。
如果BBB.txt中不含有JOB_NAME
你還不如直接在開頭第二行追加一條賦值語句。
JOB_NAME="XXX_${TABLE_SCHEMA_${TABLE_NAME}"

sed -i '/\#\!\/bin\/bash/a\JOB_NAME="XXX_${TABLE_SCHEMA_${TABLE_NAME}"' BBB.txt

⑻ shell腳本中的sed s/ /\ /g'這個命令是啥意思

sed的替換命令格式:s/A/B/g 或者 s#A#B#g 或者 s_A_B_g#只是分隔符而已,為滿足格式需要。將所有製表符\t替換為|g表示全局替換,有多少次替換多少次。