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