You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除左括号后的换行符?awk、sed实现遇阻求助

解决行尾左括号后换行符的删除问题

你需要实现的是删除行尾为左括号时的换行符,让下一行内容直接衔接在左括号后,比如把one two(\nthree转换成one two(three对吧?先分析你之前尝试的命令问题,再给出正确的解决方案:

为什么你之前的命令没生效?

  • 你的sed命令 sed 's/($/(/g' 只是替换了行尾的(为(,根本没处理换行符,自然达不到效果。
  • 你的awk命令 awk '/\($/ {printf "%s ", $0} {print; next}' 逻辑有问题:匹配行尾(的行执行printf后,又执行了print,导致该行内容被重复输出,还额外加了空格,不符合需求。

正确的Sed解决方案

使用Sed的循环和模式空间操作来处理,命令如下:

sed ':a; /($/{N; s/(\n/(/; ba}' input.txt

命令解释:

  • :a:定义一个名为a的标签,用于循环跳转
  • /($/:匹配行尾为左括号的行
  • N:将下一行内容读取到当前模式空间中,此时模式空间里是行内容(\n下一行内容
  • s/(\n/(/:把模式空间里的(+换行符替换成(,实现内容衔接
  • ba:跳转到标签a,继续循环处理(避免出现连续多行尾都是(的情况)

正确的Awk解决方案

用Awk控制输出的换行时机,命令如下:

awk '/\($/{printf "%s", $0; next} {print}' input.txt

命令解释:

  • /\($/:匹配行尾为左括号的行
  • printf "%s", $0:不带换行符输出当前行内容
  • next:跳过后续的print语句,避免输出换行
  • {print}:对不匹配的行,正常输出(自带换行符)

测试示例

假设输入文件input.txt内容为:

one two(
three four(
five six
seven(
eight

执行上述任意命令后,输出结果为:

one two(three four(five six
seven(eight

内容的提问来源于stack exchange,提问作者yorgo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:57:31