我有一个有几行的文件。
我希望更新文件,同时确保文件每一行的最后一个可见字符是单引号'
。如果没有,那么我们应该在每行的末尾添加单引号。
如果单引号是一行中的最后一个字符,则保持原样。
猫测试.txt
fahsjhjkhkjhjhajkhjf
afasfsfsfffsfasf'
aaffa' sfff
wfafsfsaffs'
fsafsfs'afffafsasf
预期输出:
fahsjhjkhkjhjhajkhjf'
afasfsfsfffsfasf'
aaffa' sfff'
wfafsfsaffs'
fsafsfs'afffafsasf'
如果匹配单引号,无论它是否存在,如果存在,替换它是可以接受的,那么你可以试试这个
sed
。这使用反向引用来捕获直到行尾的每个字符。如果在行尾找到单引号,则通过将单引号放在捕获括号之外来排除/删除它。
然后返回括号内捕获的所有内容
\1
,并将单引号硬编码到每行的末尾。该
sed
表达式s/[^']$/&'/
在以非单引号字符结尾的任何行的末尾插入单引号。在外壳中:
由于表达式包含单引号,因此我选择将表达式写在双引号中。要进行就地编辑,如果它完全实现了这个非标准选项,请使用
sed
它的选项。-i
要在空行上也插入单引号,您可以使用专门针对空行的额外表达式,或者您始终可以在行尾插入单引号,然后替换由此产生的任何双单引号。
即,要么
或者
像可以做的工作:
如果您想避免最后出现双引号,您可以尝试以下操作:
请
sed
按原样使用。在你做的所有
'
行的末尾添加一个要仅对某些行进行操作,请使用address。以 结尾的行的地址
'
是/'$/
。你用 a 反转地址选择!
,所以你得到短小、实用、便携,还覆盖了空线盒。
(注意不要激活愚蠢的历史扩展
set +H
:)假设您希望空输入行出现
'
在输出中,并且输入喜欢foo''
输出为foo'
: