bash - 如何编写 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 命令,并且一次只能使用一个文件?
我必须运行一个循环吗?
解决方案
例子
使用 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/'"
推荐阅读
- php - Wordpress 函数 wp_get_attatchment_url 不起作用
- c# - Microsoft Toolkit DataGrid 不刷新视图中的数据
- angular - 如何在 `table` 组件中插入 `thead` 组件?
- c# - 将 JSON 粘贴为不遵循 C# 命名约定的类
- highcharts - Highcharts,js 柱形图不会显示负值
- angular - 无法在字符串“sendUs”上创建属性“验证器”
- apache-kafka - KSQL 查询执行失败
- machine-learning - 使用 PyTorch 预测网格坐标序列
- java - 控制通过 Kubernetes 部署的 POD 的主机名
- java - 导航抽屉没有折叠,没有汉堡按钮