Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何替换使用“替换”找到的每个文件的第一行;查找“;_Linux - Fatal编程技术网

Linux 如何替换使用“替换”找到的每个文件的第一行;查找“;

Linux 如何替换使用“替换”找到的每个文件的第一行;查找“;,linux,Linux,我有文件列表来替换运行此命令的第一行 find . -type f -name ".txt" 我想用文本“第1行”替换找到的文件的第一行 在我的研究中,我找到了一种删除第一行的方法 ex -sc '1d|x' file.txt 然后用 echo "line 1"|cat - file.txt > out && mv out file.txt 但我不知道如何删除找到的每个文件的第一行和前缀,您可以将exec或xargs与find一起使用,但对于更复杂的命令,我总是在循环

我有文件列表来替换运行此命令的第一行

find . -type f -name ".txt"
我想用文本“第1行”替换找到的文件的第一行

在我的研究中,我找到了一种删除第一行的方法

ex -sc '1d|x' file.txt
然后用

echo "line 1"|cat - file.txt > out && mv out file.txt

但我不知道如何删除找到的每个文件的第一行和前缀,您可以将exec或xargs与find一起使用,但对于更复杂的命令,我总是在循环中运行处理。那样更清楚。以下是您可以做的:

find . -type f -name '*.txt' | while read -r f; do
  ex -sc '1d|x' "$f"
  echo "line 1"|cat - "$f" > out && mv out "$f"
done

您可以使用
exec

find . -name "*.txt" -exec sed -i .ORI '1s/.*/line 1/' {} \;

要就地编辑文件,请将备份另存为
.ORI

您是否尝试使用exec命令?您应该使用
read-r
以避免一些令人讨厌的遗留行为,并在任何地方引用
“$f”
。将
.tmp
预先添加到完整路径名都不会很好。引用文件名是个好主意。已还原为'out'临时文件名。它有一个错误| sed:-e expression#1,char 1:未知命令:`。'。有许多具有各种特质的
sed
方言。如果您需要脚本可移植到各种平台,可以切换到更标准化的Awk或Perl。我想这可以更改为使用
ex
而不是
sed
,但是您知道,我们使用
sed
进行批处理/编程编辑是有原因的。find-名称“*.txt”-exec sed-i.ORI'1 s/*/行1/'{}\;注意-i.ORI中的变化