Kha*_*yen 4 sed text-processing
问:您会给出什么命令来打印(显示在屏幕上)userNotes.txt 的更正文本,其中所有句子结尾都需要在下一个句子开头之前有两个空格?
这是我的代码
sed 's/.\s/.\s\s/'
Run Code Online (Sandbox Code Playgroud)
但这也将以点和 2 个空格结尾的行更改为点和 3 个空格。
sed 's/\.[[:space:]]\{1,\}/. /g'
Run Code Online (Sandbox Code Playgroud)
将用后跟两个空格替换一个点(由\.
或匹配[.]
,记住.
匹配任何字符)后跟一个或多个空白字符([[:space:]]
标准等价于\s
).
。
你可能想这样做的!
和?
也:
sed 's/\([.!?]\)[[:space:]]\{1,\}/\1 /g'
Run Code Online (Sandbox Code Playgroud)
使用最新版本的 GNU sed
,您可以将其缩短为:
sed -E 's/([.!?])\s+/\1 /g'
Run Code Online (Sandbox Code Playgroud)
或与perl
:
perl -lne 's/[.!?]\K\s+/ /g'
Run Code Online (Sandbox Code Playgroud)
[[:space:]]
并\s
匹配任何空白字符(尽管perl
仅限于 ASCII 字符)。这包括 CR 字符,尽管它们出现在 MS-DOS 文本文件的行尾,但通常不用作间距。因此,如果应用于 MS-DOS 格式的文件,这些命令最终可能会破坏 MS-DOS 行分隔符。
取而代之的[[:space:]]
/ \s
,你可以使用[[:blank:]]
/\h
不包括CR(\h
被支持的perl
,但不是GNU sed
)。
归档时间: |
|
查看次数: |
812 次 |
最近记录: |