
shell 的用sed替换的问题。
要求是要用户输入需要被替换和替换的字符串。然后替换当前文件夹包括子文件夹内的所有符合的字符串。#!/bin/shecho"Pleasegivenastring"readx...
要求是要用户输入需要被替换和替换的字符串。
然后替换当前文件夹包括子文件夹内的所有符合的字符串。
#!/bin/sh
echo "Please given a string"
read x
echo "What string do you want to replaces"
read y
sed -i 's/$x/$y/g' 展开
然后替换当前文件夹包括子文件夹内的所有符合的字符串。
#!/bin/sh
echo "Please given a string"
read x
echo "What string do you want to replaces"
read y
sed -i 's/$x/$y/g' 展开
4个回答
展开全部
1.s/.*(time.*) ms/\1/,我想你不了解的主要是\1这个吧,我举个例子,s/regexp/\1/,这句的意思就是用regexp中的第1个子表达式的内容来替换符合表达式regexp的内容。放在你这个例子中就是,s/.*(time.*) ms/\1/,第1个正则中(time.*)是子表达式,第二个中的\1是指将满足.*(time.*) ms的内容替换为第1个子表达式(time.*),所以输出为time=XX
2.s/.*time=//,要明白sed中如何替换文本的,s/regexp1/replacement/,是用replacement来替换regexp1表达式所匹配的内容,在你这个例子中要替换的表达式是/.*time=/,替换的内容为空,//,所以实际的意思就是将/.*time=/匹配的内容删除,输出为xx ms
3.[0-9.]的意思是匹配数字0-9或.,+的意思是重复前一个匹配1次以上,整个的意思就是匹配连续的数字或点号
2.s/.*time=//,要明白sed中如何替换文本的,s/regexp1/replacement/,是用replacement来替换regexp1表达式所匹配的内容,在你这个例子中要替换的表达式是/.*time=/,替换的内容为空,//,所以实际的意思就是将/.*time=/匹配的内容删除,输出为xx ms
3.[0-9.]的意思是匹配数字0-9或.,+的意思是重复前一个匹配1次以上,整个的意思就是匹配连续的数字或点号
展开全部
正则表达式写得有点问题,第二个是因为没有匹配的结果,在这种情况下sed默认打印出所有输入。你加个 -n 选项就看不到输出了。
之所以不能匹配,问题出在中间 \([^\(<\/span>\)]*\) 这部分。这个表示 非 <, /, s, p, a, n, > 这些字符,即中间不能出现这些字符中的任意一个,而非看作一个整体。
其实,中间只需要判断 非 < 就行了,我改一下:
echo "<span class=a>abc</span>5678</span>"|sed 's/.*<span class=a>\([^<]*\)<\/span>.*/\1/'
这样应该就可以了。
之所以不能匹配,问题出在中间 \([^\(<\/span>\)]*\) 这部分。这个表示 非 <, /, s, p, a, n, > 这些字符,即中间不能出现这些字符中的任意一个,而非看作一个整体。
其实,中间只需要判断 非 < 就行了,我改一下:
echo "<span class=a>abc</span>5678</span>"|sed 's/.*<span class=a>\([^<]*\)<\/span>.*/\1/'
这样应该就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最后一句改成
sed -i 's/'"$x"'/'"$y"'/g'
单引号内不能变量替换,要用双引号
sed -i 's/'"$x"'/'"$y"'/g'
单引号内不能变量替换,要用双引号
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sed "s#\/#\\\/#g" Temp_ScrTxt.txt
试试看
如果还不行 你看看eval命令
试试看
如果还不行 你看看eval命令
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询