gpt4 book ai didi

linux - bash 交互式行替换

转载 作者:太空宇宙 更新时间:2023-11-04 05:01:29 25 4
gpt4 key购买 nike

我有一个 bash 循环在文件中的行中移动,我想知道是否有一种方法可以交互式地用内容替换每一行。

while read p
do
echo $p
read input
if [ "$input" == "y" ]; then
# DO SOME ON P REPLACEMENT HERE
done<$fname

从 read(3) 中,我知道 read 将文件描述符复制到 *buffer 中。我意识到我可以直接使用 sed 替换,但无法让它在这个 bash 循环上下文中工作。例如,假设我想换行选定的行:

sed 's/\(.*\)/wrap \(\1\)/'

复杂性:bash“读取”命令吞掉“\”并继续读取“行”(这就是我正在寻找的)。 sed 似乎不是。这意味着行数会有所不同,因此如果要与 sed 一起使用,简单的计数器似乎不是最佳选择。

最佳答案

使用ex ,这是 vim 的非可视模式(就像更新的 ed ):

ex -c '%s/\(.*\)/wrap \(\1\)/c' FILE

请注意,我需要添加 % (对所有行进行操作)和 c (替换前提示)在 sed 的开头和结尾分别表达。

出现提示时,输入 y<CR>替代,n<CR>不替代,q<CR>停止替代命令。输入q<CR>后或者到达文件末尾,您可以使用 w<CR> 保存更改(这将覆盖该文件)并使用 q<CR> 退出.

或者,您可以使用ed ,但我不会帮你。 ;)

有关 ex 的更多一般信息,看看这个问题:

https://superuser.com/questions/22455/vim-what-is-the-ex-mode-for-batch-processing-for

关于linux - bash 交互式行替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31317333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com