⑴ 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表示全局替换,有多少次替换多少次。