尝试通过"\
提取特殊字符\"
和sed
之间的文本
Ex: "\hell@#$\"},
预期输出:hell@#$
答案 0 :(得分:2)
使用捕获组和带有基本正则表达式的反向引用,您可以轻松地做到这一点:
sed 's/^["][\]\([^\]*\).*$/\1/'
说明
sed 's/find/replace/
,其中^["][\]
(零个或多个字符而不是\
的捕获\(...\)
之前,[^\]*
的双引号和\
,关闭捕获\)
,然后.*$
关闭字符串的其余部分; \1
(第一个后向引用),其中包含在\(...\)
之间捕获的文本。(注意:,如果您的"\
没有以字符串开头,请删除第一个'^'
锚点)
示例
$ echo '"\hell@#$\"},' | sed 's/^["][\]\([^\]*\).*$/\1/'
hell@#$
仔细研究一下,如果您有任何疑问,请告诉我。
答案 1 :(得分:0)
这可能对您有用(GNU sed):
sed -nE '/"\\[^\\]*\\+([^\\"][^\\]*\\+)*"/{s/"\\/\n/;s/.*\n//;s/\\"/\n/;P;D}' file
解决方案分为两部分:
首先,使用正则表达式确定两个字符对是否存在。这可能很棘手,因为否定的类是不够的,因为边缘情况很容易击败简单化的方法。
第二,一旦确实存在一对字符,则必须提取它们之间的文字。