Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用sed替换多行字符串的一部分_Sed - Fatal编程技术网

如何用sed替换多行字符串的一部分

如何用sed替换多行字符串的一部分,sed,Sed,我想用替换字符串中的换行符,该换行符位于三个反勾号语句(```中)之外的所有位置 字符串: This is some requirements just talking about c++ with `char` types supported by C++: ``` using SecureString = BasicSecureString<char>; using WSecureString = BasicSecureString<wchar_t>; using U

我想用

替换字符串中的换行符,该换行符位于三个反勾号语句(```中)之外的所有位置

字符串:

This is some requirements just talking about c++ with
`char` types supported by C++:
```
using SecureString = BasicSecureString<char>;
using WSecureString = BasicSecureString<wchar_t>;
using U16SecureString = BasicSecureString<char16_t>;
using U32SecureString = BasicSecureString<char32_t>;
```
And continuing to write
stuff
<代码>这是C++的一些要求。 `C++支持的char`类型: ``` 使用SecureString=basicsecuretring; 使用wsecuretring=基本安全性; 使用U16SecureString=基本安全性; 使用U32SecureString=BasicSecureString; ``` 继续写作 东西 预期结果:

This is some requirements just talking about c++ with<br/>`char` types supported by C++:<br/>```
using SecureString = BasicSecureString<char>;
using WSecureString = BasicSecureString<wchar_t>;
using U16SecureString = BasicSecureString<char16_t>;
using U32SecureString = BasicSecureString<char32_t>;
```<br/>And continuing to write<br/>stuff
<代码>这是C++所讨论的一些与C++支持的
char类型有关的要求:
使用SecureString=basicsecuretring; 使用wsecuretring=基本安全性; 使用U16SecureString=基本安全性; 使用U32SecureString=BasicSecureString; ```
并继续写
东西 我目前拥有的是:

sed --null-data '/```.*```/!s/\n/<br\/>/g'
sed--null数据'/`.*``/!s/\n//g'
但它只处理不包括回跳的输入


有人有什么提示吗?

使用
perl
awk

perl-0777-pe的#``.*`(*SKIP)(*F)|\n#
#sg' awk'/`/{f=!f}{ORS=f?RS:“
”}1”
perl
解决方案与您使用
sed
尝试的解决方案类似

  • -0777
    将拖拽整个输入文件,类似于
    sed-z
    ,但
    -z
    使用ASCII NUL作为行分隔符
  • ``.*?``(*SKIP)(*F)
    以防止更改此匹配部分
  • |\n
    指定了应匹配的内容

  • 替换字符串
  • s
    标志,允许
    也匹配换行符
使用
awk
,输出记录分隔符将根据
f
的值进行更改,只要输入有三个反勾号,该值就会更改。这种方法的优点是不必对整个输入进行重复


如果不希望更改文件中的最后一个换行符,请使用

perl-0777-pe的#``.*`(*SKIP)(*F)|\n(?!\z)#
#sg'
使用
perl
awk

perl-0777-pe的#``.*`(*SKIP)(*F)|\n#
#sg' awk'/`/{f=!f}{ORS=f?RS:“
”}1”
perl
解决方案与您使用
sed
尝试的解决方案类似

  • -0777
    将拖拽整个输入文件,类似于
    sed-z
    ,但
    -z
    使用ASCII NUL作为行分隔符
  • ``.*?``(*SKIP)(*F)
    以防止更改此匹配部分
  • |\n
    指定了应匹配的内容

  • 替换字符串
  • s
    标志,允许
    也匹配换行符
使用
awk
,输出记录分隔符将根据
f
的值进行更改,只要输入有三个反勾号,该值就会更改。这种方法的优点是不必对整个输入进行重复


如果不希望更改文件中的最后一个换行符,请使用

perl-0777-pe的#``.*`(*SKIP)(*F)|\n(?!\z)#
#sg'
使用
-z
时,只有一行<代码>/regexp/适用于整行,而不是行的一部分是的,我也是这么想的。当你使用
-z
时,你只有一行<代码>/regexp/适用于整条线路,而不是线路的一部分是的,我也是这么想的。