gpt4 book ai didi

windows - Vista 中的 sed - 如何删除之间的所有符号?

转载 作者:可可西里 更新时间:2023-11-01 10:02:16 26 4
gpt4 key购买 nike

我有一个 bat 文件,我应该用它来删除一个文件的一部分并保存到另一个文件中。我需要删除文本“[aaa bbb]”和“[ccc ddd]”之间的所有符号。那就是如果我有文字:

[aaa bbb]
1
2
3
[ccc ddd]

我应该有输出:

[aaa bbb]
[ccc ddd]

谢谢

编辑:我想澄清一下这个问题。我应该删除 marker1 和 marker2 之间的所有符号。 Marker1 和 marker2 只是一些单词或文本的一部分,而不是强制行。例如我会:

[aaa bbb] [ccc]
1
2
3
4
5
[www yyy]

如果我想删除 [aaa bbb] 和 [www yyy] 之间的文本,我应该输出:

[aaa bbb] 
[www yyy]

最佳答案

查看 this sed hints page 上的“在标记 1 和标记 2 之间删除”部分

将其应用于您的示例。 clean.sed:

/^\[aaa bbb\]$/,/^\[ccc ddd\]$/{
/^\[aaa bbb\]$/!{
/^\[ccc ddd\]$/!d
}
}

运行使用:

sed -f clean.sed inputfile.txt

要“就地”编辑输入文件,请使用 sed 的 -i 选项:

sed -i.bak -f clean.sed datafile.txt

在编辑原始文件之前保存名为“datafile.txt.bak”的文件的备份副本。

编辑:由于假设始终位于自己一行的标记是错误的,因此这里有一个脚本可以处理一行中间的标记:

/\[aaa bbb\]/,/\[ccc ddd\]/{
s/\[aaa bbb\].*/[aaa bbb]/
s/.*\[ccc ddd\]/[ccc ddd]/
/\[aaa bbb\]$/!{
/^\[ccc ddd\]/!d
}
}

对于这个输入:

foo[aaa bbb]1
2
3
4
5[ccc ddd]bar
foo
[aaa bbb]
1
2
3
[ccc ddd]
bar

它产生:

foo[aaa bbb]
[ccc ddd]bar
foo
[aaa bbb]
[ccc ddd]
bar

注意!不能处理标记可以出现在同一行的文件。

再次编辑:如果标记 1 的输入格式使您始终可以指望它单独成行,您可以简化脚本:

/^\[aaa bbb\]$/,/\[ccc ddd\]/{
s/.*\[ccc ddd\]/[ccc ddd]/
/^\[aaa bbb\]$/!{
/^\[ccc ddd\]/!d
}
}

(在一行的开头和结尾锚定标记 1,并跳过标记 1 行的修剪。)

关于windows - Vista 中的 sed - 如何删除之间的所有符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/425864/

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