首页 > 解决方案 > 如何编写 Bash 脚本以使用相同的命令编辑多个文本文件?

问题描述

我很陌生bash。我有十个文本文件,我想用同一行代码进行编辑。

#!/bin/bash

sed -i -e 's/.\{6\}/&\n/g' -e 's/edit/edit2/g' | tr -d "\n" | sed  's/edit2/edit/g'| grep -o "here.*there" | sed -r '/^.{,100}$/d'
< files 1-10

我知道我可以使用sed -f sed.sh <file1 >file1,但这仅适用于 sed 命令,并且一次只能使用一个文件?

我必须运行一个循环吗?

标签: bash

解决方案


您可以使用for 循环。您可以使用工具parallel

例子

使用 for 循环创建一组测试文件

mkdir -p /tmp/so58333536
cd /tmp/so58333536
for i in 1.txt 2.txt 3.txt 4.txt 5.txt;do echo "The answer is 41" > $i;done
cat /tmp/so58333536/*

现在使用并行[1]纠正您的错误。

mkdir /tmp/so58333536.new
ls /tmp/so58333536/*  |parallel "sed 's/41/42/' {} > /tmp/so58333536.new/{/}"
cat /tmp/so58333536.new/*

{}:: 指的是当前文件

{/}:: 指的是当前文件的名称(路径被删除)

读取:列出 so58333536 中的所有文件并将以下 sed 命令应用于每个文件并将输出写入 so58333536.new。


[1] 另一种选择是sed -i用于就地编辑。

对此要非常小心!错误可能会造成严重的损失!

# !! Do not use -i option regularly !! 
ls /tmp/so58333536/*  |parallel "sed -i 's/41/42/'"

推荐阅读