Chinaunix
标题:
sed中的匹配变量中包含左斜杠如何处理
[打印本页]
作者:
o06v90o
时间:
2018-06-19 07:12
标题:
sed中的匹配变量中包含左斜杠如何处理
a.txt文件内容:
xx_app_static_source:/xx/app/
j=$(sed -n '1p'|cut -d: -f2)
location=$(sed -n "/$j/p" nginx_n|cut -d: -f2)
sed的模式匹配$j中现在包含/,导致脚本执行异常,试了把//匹配符号换成比如##也不行
作者:
baby_神
时间:
2018-06-19 09:58
单纯的过滤用grep吧
作者:
christmas1102
时间:
2018-06-19 09:58
本帖最后由 christmas1102 于 2018-06-19 09:59 编辑
j='/xx/app/'
printf "%s\n" 'asd' 'efg' '/xx/app/' '\$j' |sed -n '/'${j//'/'/'\/'}'/p'
复制代码
作者:
o06v90o
时间:
2018-06-19 10:22
回复
3#
christmas1102
大佬,能不能给解释下,看不懂
作者:
wh7211
时间:
2018-06-19 10:22
回复
1#
o06v90o
按你的思路就这样改
cat 1
xx_app_static_source:/xx/app/
cat 2
/xx/app/aaa:1 true
/xx/app/bbb:2 true
/yy/app/aaa:3 false
/yy/app/bbb:4 false
j=$(sed -n '1p' 1|cut -d: -f2|sed 's#/#\\/#g')
echo "$j"
\/xx\/app\/
location=$(sed -n '/'"$j"'/p' 2|cut -d: -f2)
echo "$location"
1 true
2 true
复制代码
作者:
christmas1102
时间:
2018-06-19 13:04
本帖最后由 christmas1102 于 2018-06-19 13:10 编辑
回复
4#
o06v90o
管道之前的printf 是测试用的文本,不用理会
sed这段主要就是变量替换
${变量名//原字符/新字符}
$j的值是'/xx/app/',用变量替换把所有的斜杠替换成'\/' 就是加转移符号,所以最后就写成:${j//'/'/'\/'}
复制代码
用单引号隔一下,不然命令识别不了,在sed里面引用,只需要前后加单引号就行了,不过并不是所有变量在sed里引用都可以只加单引号,有些是需要 单引号+双引号+变量名
作者:
yinyuemi
时间:
2018-06-19 13:24
回复
6#
christmas1102
用sed的\%REGEX\%就可以
作者:
chengchow
时间:
2018-06-19 13:25
j=$(sed -r '1{s/.*:(.*)/\1/;s#/#\\/#g}' a.txt
复制代码
作者:
christmas1102
时间:
2018-06-19 13:45
回复
7#
yinyuemi
大神..
学习了,试了下,确实可以
作者:
christmas1102
时间:
2018-06-19 13:45
回复
7#
yinyuemi
大神..
学习了,试了下,确实可以
作者:
chengchow
时间:
2018-06-19 13:54
回复
7#
yinyuemi
学习了
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2