我可以匹配文件中的模式,对其进行更改并将整行插入到文件中的其他位置吗?

发布于 2024-12-02 02:23:32 字数 681 浏览 1 评论 0原文

我正在尝试使用 sed 来完成手头的重复性任务。我想要做的是在一堆文件中搜索某种模式,对其进行一些更改,然后将整行插入到找到的同一文件中的其他位置。最好在其他模式发现的特定位置。不影响原来的图案。

为了简单起见,我们假设它是一个键值存储,其中一些新键应该与每个文件中的其他键具有相同的值。假设目录中的每个文件看起来像这样:

key10=value10
key20=value20
key30=value30
key40=value40

现在我想找到 key10=value10 模式,将 key10 更改为 key35 并插入它在key30之后。使用 Linux 终端。最好使用单行代码并同时处理目录中的所有文件。

sed -n 's/key10/key35/p' file1

将打印我想要的内容,即key35=value10。我现在需要的是保留它以插入到 file1 中找到 key30=value30 之后的行。

我猜想稍后可以使用 for file in 'ls' 来对 dir 中的每个文件执行此操作。首先只需要一句台词,请帮忙。

I'm trying to use sed for a repetitive task at hand. What I want to do is search a bunch of files for some pattern, make some change to it and then insert that whole line somewhere else in the same file it was found. Preferable at a specific place found by some other pattern. Without affecting the original pattern.

For simplicity's sake let's say it's a key-value store where some new key should have the same value as some other key in each file. Say each file in the directory looks something like this:

key10=value10
key20=value20
key30=value30
key40=value40

Now I want to find the key10=value10 pattern, change key10 to key35 and insert it after key30. Using a Linux terminal. Preferably using a one-liner and for all the files in the directory at once.

sed -n 's/key10/key35/p' file1

will print what I want, i.e key35=value10. What I need now is to preserve this for insertion into file1 at the line after where key30=value30 is found.

I guess a for file in 'ls' could later be used to perform this operation on each file in dir. Just need the one-liner first, please help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浅暮の光 2024-12-09 02:23:32
$cat in.txt 
key10=value10
key20=value20
key30=value30
key40=value40
$ sed "/key30=value30/a `sed -n 's/key10/key35/p' in.txt`" in.txt > out.txt; mv out.txt in.txt
$ cat in.txt 
key10=value10
key20=value20
key30=value30
key35=value10
key40=value40
$cat in.txt 
key10=value10
key20=value20
key30=value30
key40=value40
$ sed "/key30=value30/a `sed -n 's/key10/key35/p' in.txt`" in.txt > out.txt; mv out.txt in.txt
$ cat in.txt 
key10=value10
key20=value20
key30=value30
key35=value10
key40=value40
幼儿园老大 2024-12-09 02:23:32

您实际上并不需要使用 sed 来保持文件排序:

for file in *; do
   sed 's/^key10=/key35=/' "$file" | sort > tmpname && mv tmpname "$file"
done

You don't really need to use sed to keep the file sorted:

for file in *; do
   sed 's/^key10=/key35=/' "$file" | sort > tmpname && mv tmpname "$file"
done
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文