【发布时间】:2021-09-22 07:43:50
【问题描述】:
我正在尝试在 bash 脚本中使用 perl 来修剪文档开头和结尾处的空间,而不触及文件中的中间空间
文件格式如下
<newline>
<space><newline>
<tab><newline>
<space><tab><newline>
START<newline><newline>
<space>INDENTED<newline><newline>
END<newline>
<space><tab><newline>
<tab><newline>
<space><newline>
<newline>
注意:<newline> 是 \n,<space> 是 & <tab> 是 \t
原来的文件是这样的
START
INDENTED
END
我需要文件的内容是
START<newline><newline>
<space>INDENTED<newline><newline>
END
即像这样的最终文件
START
INDENTED
END
我尝试使用以下命令同时使用它们,但它也会修剪中间空间。它们都从整个文档中修剪空格和换行符,而不仅仅是从文档的开头开始
perl -pi -e 's/^\s*//gs' sample.txt
perl -pi -e 's/\A\s*//gs' sample.txt
两者都折叠了所有内部空间
START<newline>
INDENTED<newline>
END<newline>
我试过这个。它折叠了换行符
perl -pi -e 's/\s*$//gs' sample.txt
perl -pi -e 's/\s*\Z//gs' sample.txt
两个折叠的换行符
START<space>INDENTEDEND<newline>
这是我的假设
-
\A仅匹配文档的开头,\Z匹配文档的结尾(而不是^和$) -
gs标志中的s确保整个文档被视为单行,换行符替换为字符\n
我是 perl 的新手。感谢有人可以帮助我了解我哪里出错了
【问题讨论】:
-
@choroba 在我在这里发布问题后,我不确定它是否属于这里/服务器故障论坛。所以,我也在那里发布了同样的问题。你知道哪个论坛是对的吗?
-
@mpapec 对于
perl -i -pe 's/^\s+|\s+$//g' sample.txt,我知道了STARTINDENTEDEND -
它甚至可能同时适用于两者,但并非没有将它们相互关联。没有链接意味着没有同时访问这两个站点的人可能会将精力浪费在其他地方已经解决的问题上。
标签: perl