在文本文件的第一行之前插入文件名
Inserting the filename before the first line of a text file
我正在尝试将文本文件的文件名添加到同一文本文件的第一行。例如,如果文件名为 test1.txt,那么打开文件时的第一行应该是 test1.
下面是我这样做的目的,我遇到的唯一问题是单词“$file”被写入文件而不是文件名。感谢您的帮助。
for file in *.txt; do
sed -i '1 i$file' $file;
awk 'sub("$", "\r")' "$file" > "$file"1;
mv "$file"1 "$file";
done
如果没有简洁、可测试的示例输入和预期输出,这是一个未经测试的猜测,但听起来您只需要:
awk -i inplace -v ORS='\r\n' 'FNR==1{print FILENAME}1' *
不需要 shell 循环或多个命令。
以上使用 GNU awk 进行就地编辑,我假设您代码中的 sub()
旨在在每行末尾添加一个 \r
。
如果你想在第一行使用 test1,使用 gnu sed
sed -i '1{x;s/.*/fich=$(ps -p $PPID -o args=);fich=${fich##*\} };echo ${fich%%.*}/e;G}' test1.txt
我刚刚开始学习更多关于 sed 和 awk 的知识,并将其放入一个名为 insert.sed 的文件中,获取它并为其传递一个文件名:
sed -i '1s/^./''\'$'\n/g'
在尝试中,它似乎工作正常:
rent$ cat x.txt
<<< Who are you?
rent$ source insert.sed x.txt
rent$ cat x.txt
x.txt
<< Who are you?
它切断了第一行的第一个字符,所以我必须修复它,否则它会将文件名添加到第一行。
我确信有更好的方法。
我正在尝试将文本文件的文件名添加到同一文本文件的第一行。例如,如果文件名为 test1.txt,那么打开文件时的第一行应该是 test1.
下面是我这样做的目的,我遇到的唯一问题是单词“$file”被写入文件而不是文件名。感谢您的帮助。
for file in *.txt; do
sed -i '1 i$file' $file;
awk 'sub("$", "\r")' "$file" > "$file"1;
mv "$file"1 "$file";
done
如果没有简洁、可测试的示例输入和预期输出,这是一个未经测试的猜测,但听起来您只需要:
awk -i inplace -v ORS='\r\n' 'FNR==1{print FILENAME}1' *
不需要 shell 循环或多个命令。
以上使用 GNU awk 进行就地编辑,我假设您代码中的 sub()
旨在在每行末尾添加一个 \r
。
如果你想在第一行使用 test1,使用 gnu sed
sed -i '1{x;s/.*/fich=$(ps -p $PPID -o args=);fich=${fich##*\} };echo ${fich%%.*}/e;G}' test1.txt
我刚刚开始学习更多关于 sed 和 awk 的知识,并将其放入一个名为 insert.sed 的文件中,获取它并为其传递一个文件名:
sed -i '1s/^./''\'$'\n/g'
在尝试中,它似乎工作正常:
rent$ cat x.txt
<<< Who are you?
rent$ source insert.sed x.txt
rent$ cat x.txt
x.txt
<< Who are you?
它切断了第一行的第一个字符,所以我必须修复它,否则它会将文件名添加到第一行。
我确信有更好的方法。