在文本文件的第一行之前插入文件名

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?

它切断了第一行的第一个字符,所以我必须修复它,否则它会将文件名添加到第一行。

我确信有更好的方法。