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

Sed 在文本文件的第一行之前插入文件名,sed,quoting,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 没有简洁、可测试的样本输入和

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

没有简洁、可测试的样本输入和预期输出,这是一个未经测试的猜测,但听起来您需要的只是:

awk -i inplace -v ORS='\r\n' 'FNR==1{print FILENAME}1' *
不需要shell循环或多个命令


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

如果您想在第一行使用test1,则使用GNU

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

如果您想在第一行使用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/^./'$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?
租金$cat x.txt

我刚刚开始学习更多关于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?
租金$cat x.txt

请参阅:您希望
sub(“$”,“\r”)
能做什么?@user2334436添加两个具有预期输出的小样本输入文件会有很大帮助。。一点也不清楚。。。如果文件名为
test1.txt
,则需要添加
test1
。。。但是你的代码没有尝试这样做。。。如果您有GNU sed,我想您需要的是-
sed-I'1F'*.txt
如果要添加完整的文件名请参见:您希望
sub(“$”,“\r”)
能做什么?@user2334436添加两个具有预期输出的小样本输入文件会有很大帮助。。一点也不清楚。。。如果文件名为
test1.txt
,则需要添加
test1
。。。但是你的代码没有尝试这样做。。。如果您有GNU sed,我想您需要的是-
sed-I'1F'*.txt
如果要添加完整的文件名,那么应该是显而易见的,但是修复方法是只匹配行的开头:sed-I'1s/^./'$1'\'$'\n/g'$1应该是显而易见的,但是修复方法是只匹配行的开头:sed-I'1s/^./'$1'\'$'\n/g'$1