替换sed中的“高级”模式

时间:2019-06-09 17:23:11

标签: regex shell sed hyphen

我不知道该如何更改:

\usepackage{scrpage2}
\usepackage{pgf} \usepackage[latin1]{inputenc}\usepackage{times}\usepackage[T1]{fontenc}
\usepackage[colorlinks,citecolor=black,filecolor=black,linkcolor=black,urlcolor=black]{hyperref}

仅使用sed

REPLACED
REPLACED REPLACEDREPLACEDREPLACED
REPLACED

我正在尝试类似sed 's!\\.*\([.*]\)\?{.\+}!REPLACED!g' FILE

但这给了我

REPLACED
REPLACED
REPLACED

我认为。*会被使用,并且我模式中的其他所有内容都将被忽略,但是我不知道该怎么做。

了解了如何格式化正则表达式之后,下一步就是将其更改为:

\usepackage{scrpage2}
\usepackage{pgf} 
\usepackage[latin1]{inputenc}
\usepackage{times}
\usepackage[T1]{fontenc}
\usepackage[colorlinks,citecolor=black,filecolor=black,linkcolor=black,urlcolor=black]{hyperref}

所以,我也很高兴朝着这个方向发展。

2 个答案:

答案 0 :(得分:2)

以下代码恰好适用于您给出的示例:

sed 's/\\[^\\[:space:]]\+/REPLACED/g'

即匹配一个反斜杠,后跟一个或多个非空格字符或另一个反斜杠。

要使事情更具体,可以使用

sed 's/\\[[:alnum:]]\+\(\[[^][]*\]\)\?{[^{}]*}/REPLACED/g'

即匹配一个反斜杠,后跟一个或多个字母数字字符,再跟一个可选的[ ]组,再跟一个{ }组。

[ ]组匹配[,后跟零个或多个非括号字符,后跟]

{ }组匹配{,后跟零个或多个非花括号字符,后跟}

答案 1 :(得分:1)

抢救Perl!它具有“节俭量词”的功能:

perl -pe 's!\\.*?\.?{.+?}!REPLACED!g' FILE

请注意,我删除了捕获组,因为您没有在任何地方使用它。另外,[.*]匹配点或星号,但您可能想匹配文字点。