尽管还有许多类似的问题,但我仍然感到困惑。
qx|o1|md|4SAK9H7DQ876CAJ943,SJT8642H2DKT2CQ76,SQ5HKT653DAJCKT52|rh||ah|Board 1|sv|0|pg||
qx|o2|md|4SKQJ7642H9DQJ8CK8,STHAK8762D74CQJ65,SA85HQJTDAK96CT92|rh||ah|Board 2|sv|0|pg||
qx|o3|md|4ST3HAT9DAK96CA983,S76HK864D732CJT74,SAQJ82HJDQJT85CKQ|rh||ah|Board 3|sv|0|pg||
qx|o4|md|4SAQ4HT65432DAJ4CJ,SJT765HAKDT982C43,SK98HQJ9DK75CAQ92|rh||ah|Board 4|sv|0|pg||
在上面的文本中,如何找到每隔一次出现的4S
,并将其替换为3S
?(或者,在每隔一行,4S
变成3S
。)(假设字符串4S
在每一行只出现一次。)我在 Sublime Text 或 Windows 上的 Notepad++ 中工作。
答案1
使用 Notepad++:
- Ctrl+H
- 找什么:
.*?4S.*?\K4S
- 用。。。来代替:
3S
- 查看 相符
- 查看 环绕
- 查看 正则表达式
- 查看
. matches newline
- Replace all
解释:
.*? # 0 or more any character, not greedy
4S # literally 4S, first one
.*? # 0 or more any character, not greedy
\K # forget all we have seen until this position
4S # literally 4S, second one
截图(之前):
截图(之后):
答案2
我猜你需要 sed 或 awk 之类的东西来实现这一点。在 Linux 中的 Bash shell 上,我会使用 sed 和以下命令:
sed -e 'N; s/4s/3s/2' < file.txt
其中file.txt
应该包含您的输入行。
启动后,sed 将
- 将第一行拉入 sed 的模式空间,
-N
将下一行(第二行)拉入模式空间,
- `s/4s/3s/2' 将用“3s”替换模式空间中第二次出现的“4s”。
之后,这两行将写入标准输出,并开始 sed 的新循环。
显然,您也可以通过它来传输前一个命令的输出。
'command' | sed -e 'N; s/4s/3s/2'