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

时间:2017-09-29 19:52:18

标签: sed quoting

我正在尝试将文本文件的文件名添加到同一文本文件的第一行。例如,如果文件名称为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

3 个答案:

答案 0 :(得分:2)

如果没有简洁,可测试的样本输入和预期输出,这是一个未经测试的猜测,但它就像您需要的那样:

awk -i inplace -v ORS='\r\n' 'FNR==1{print FILENAME}1' *

无需shell循环或多个命令。

以上使用GNU awk进行就地编辑,我假设代码中的sub()旨在在每行的末尾添加\r

答案 1 :(得分:1)

我刚开始学习更多关于sed和awk的知识,并将其放入一个名为insert.sed的文件中并获取并传递给它一个文件名:

sed -i '1s/^./'$1'\'$'\n/g' $1

在尝试时,似乎工作正常:

rent$ cat x.txt 

<<< Who are you?

rent$ source insert.sed x.txt

rent$ cat x.txt 

x.txt

<< Who are you?

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

我确信有更好的方法。

答案 2 :(得分:0)

如果你想在第一行使用test1,请使用gnu sed

sed -i '1{x;s/.*/fich=$(ps -p $PPID -o args=);fich=${fich##*\\} };echo ${fich%%.*}/e;G}' test1.txt