bash查找并替换-sed awk

问题描述 投票:-1回答:1

我正在尝试通过bash脚本清理超过120,000行的文本文件。我需要执行几次查找和替换。每次查找和替换的顺序很重要,文件需要“记住”先前的查找和替换。

示例:将所有'。'(句点)替换为'。\ n'(句点和换行符),然后

然后用'?\ n'(问号和换行符替换所有'?'(问号),然后

用'!\ n'(感叹号和换行符)替换所有'!'(句号),然后...等。

我正在这样做,但是不起作用:

#!/usr/bin/env bash

sed 's/./.\n/g'
sed 's/?/?\n/g'
sed 's/!/!\n/g'
input.txt

我在做什么错?

sed或awk对于我要达到的目标更好?

regex bash sed syntax escaping
1个回答
0
投票

您可能总是通过管道传递sed命令,但是在这种情况下,将所有条件组合成一个命令是有意义的:

sed 's/[.!?]/&\n/g' file > newfile

[.!?]匹配替换模式中的.!?&,将匹配值放回字符串中(在该值之后立即添加换行符。)>]

请参见online demo

s="This is a text. Want more? Yes! End"
sed 's/[.!?]/&\n/g' <<< "$s"

输出:

This is a text.
 Want more?
 Yes!
 End

如果需要删除?!.使用后的空格

sed 's/\([.!?]\)[[:space:]]*/\1\n/g' file > newfile

请参见another sed demo。在这里:

  • [sed-捕获组1:匹配\([.!?]\).!]
  • ?-0或多个空格
  • 替换模式中的[[:space:]]*是指捕获到组1中的值。

© www.soinside.com 2019 - 2024. All rights reserved.