regex - sed 在第 n 次出现后替换任何内容

标签 regex bash shell sed

我是 Bash 脚本的新手,一直在寻找一个正确的答案,以了解如何在第 n 次出现后使用 sed 替换任何内容(而不是替换第 n 次出现)。

例如,如果我想更改第二个空格之后的任何内容,我会将以下句子作为输入:Today is a good day 并将以下句子作为结果:今天是星期五

有什么想法吗?

最佳答案

您可以使用:

s='Today is a good day'
echo "$s" | sed 's/^\(\([^[:space:]]\+[[:space:]]\+\)\{3\}\)[^[:space:]]\+[[:space:]]\+/\1fri/'
Today is a friday

使用 -r 简化:

cho "$s" | sed -r 's/^((\S+\s+){3})\S+\s+/\1fri/'
Today is a friday

关于regex - sed 在第 n 次出现后替换任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28180426/

相关文章:

c# - 删除变音符号,某些字母上的某些变音符号除外

linux - shell 脚本中的 su 和 sudo

java - echo 参数到java程序

bash - 读取printf的结果 '%q' "$VAR"

bash - Bash 中的管道输出和捕获退出状态

linux - 内存问题 : Shell Scripting

Python Pandas - 基于正则表达式替换 - 忽略其余值 - python 中基于正则表达式的 vlookup

python检查年份是否在字符串中

javascript - jQuery - 在逗号前后添加空格

bash - 如何快速切换docker环境进行开发?