Sed 表达式仅转换以某些示例短语开头的某些行
Sed expression to convert only certain lines starting with some example phrase
有一个包含常规文本的示例文件。在文档的某些地方混合了以下几行:
| ![](/img/2016/12/020.jakis-tam-text1.png#medium) | ![](/img/2016/12/021.jakis-tam-text2.png#medium) | ![](/img/2016/12/022.jakis-tam-text3.png#medium) |
| ![](/img/2016/12/020.jakis-tam-text1.png#medium) | ![](/img/2016/12/021.jakis-tam-text2.png#medium) |
有以下 sed 表达式将行转换为所需的形式:
sed 's#\([^[]*.\)\([^\.]*.\([^\.]*\)[^)]*.\)##g'
如何将此 sed 表达式仅应用于那些以 | ![](
开头的行?
在您的 s
命令前加上 /| !\[](/
。
[
被解释为正则表达式,为避免这种情况,必须对其进行转义。
您的模式不太正确:.
当未转义匹配任何字符时。另外,请注意您不需要转义括号表达式中的 .
个字符。
我建议使用以下命令:
sed '/^|[[:space:]]!\[](/s#\(|[[:space:]]!\[\)\(]([^().]*\.\([^|.]*\)\.[^()]*)\)##g'
参见 online demo。
此处,POSIX BRE 模式匹配
/^|[[:space:]]!\[](/
- 任何以 |
空格开头的行,然后是 ![](
text
s#\(|[[:space:]]!\[\)\(]([^().]*\.\([^|.]*\)\.[^()]*)\)##g
-
\(|[[:space:]]!\[\)
- 第 1 组 (</code>):<code>|
,一个空格,![
文本
\(]([^().]*\.
- 第 2 组开始:](
,然后是 (
、)
和 .
以外的任何零个或多个字符,然后是 .
(注意它被转义了)
\([^|.]*\)
- 第 3 组 (</code>):除 <code>|
和 .
之外的任何零个或多个字符
\.[^()]*)\)
-(仍然是第 2 组):.
字符,然后是 (
和 )
以外的零个或多个字符,然后是 )
字符
替换是组 1、3 和 2 的串联。
有一个包含常规文本的示例文件。在文档的某些地方混合了以下几行:
| ![](/img/2016/12/020.jakis-tam-text1.png#medium) | ![](/img/2016/12/021.jakis-tam-text2.png#medium) | ![](/img/2016/12/022.jakis-tam-text3.png#medium) |
| ![](/img/2016/12/020.jakis-tam-text1.png#medium) | ![](/img/2016/12/021.jakis-tam-text2.png#medium) |
有以下 sed 表达式将行转换为所需的形式:
sed 's#\([^[]*.\)\([^\.]*.\([^\.]*\)[^)]*.\)##g'
如何将此 sed 表达式仅应用于那些以 | ![](
开头的行?
在您的 s
命令前加上 /| !\[](/
。
[
被解释为正则表达式,为避免这种情况,必须对其进行转义。
您的模式不太正确:.
当未转义匹配任何字符时。另外,请注意您不需要转义括号表达式中的 .
个字符。
我建议使用以下命令:
sed '/^|[[:space:]]!\[](/s#\(|[[:space:]]!\[\)\(]([^().]*\.\([^|.]*\)\.[^()]*)\)##g'
参见 online demo。
此处,POSIX BRE 模式匹配
/^|[[:space:]]!\[](/
- 任何以|
空格开头的行,然后是![](
texts#\(|[[:space:]]!\[\)\(]([^().]*\.\([^|.]*\)\.[^()]*)\)##g
-\(|[[:space:]]!\[\)
- 第 1 组 (</code>):<code>|
,一个空格,![
文本\(]([^().]*\.
- 第 2 组开始:](
,然后是(
、)
和.
以外的任何零个或多个字符,然后是.
(注意它被转义了)\([^|.]*\)
- 第 3 组 (</code>):除 <code>|
和.
之外的任何零个或多个字符
\.[^()]*)\)
-(仍然是第 2 组):.
字符,然后是(
和)
以外的零个或多个字符,然后是)
字符
替换是组 1、3 和 2 的串联。