我在安装了Zsh的MacOS中运行以下代码:
FILES="
DEMO04Q2.TXT DEMO04Q3.TXT DEMO04Q4.TXT
DEMO05Q1.TXT DEMO05Q2.TXT
"
for f in $FILES
do
thefilenamenosuffix=$(basename $f .TXT)
# remove windows carriage return,fix bad data records with embedded n, remove the header line and add the filename as the last column on each line
sed 's/r$//' $f | sed 'N;s/n$/$/' | sed '1,1d' | sed "1,$ s/$/$f/" >> all_version_A_demo_legacy_data_with_filename.txt
done
结果在:
sed:DEMO04Q2.TXT DEMO04Q3.TXT demo04q 4.TXTDEMO05Q1.TXT DEMO05Q2.TXT:没有这样的文件或目录sed:1:";1,%s/$/DEMO04Q2.TXT D":替代模式内的无标题换行符
所有文件都与同一脚本位于同一目录中。我可能错过了一些简单的东西。
我验证了这些文件与我正在运行的脚本在同一目录中。
无法解析所有您想做的事情,只会丢弃sed表达式。
不确定根本原因,但在您的表达式中发现了两个问题,一个是您的一个是zsh(??mac?(,但两者都是'$'字符:
1-基本结构:
sed 's/r$//' $f | sed 'N;s/n$/$/' | sed '1,1d' | sed "1,$ s/$/$f/"
更好的格式来查看/了解正在发生的事情:
sed -e 's/r$//'
-e 's/n$/$/' <<< 'N' not needed, ?? what doing?
-e '1,1d' <<< this seems to be first
-e "1,$ s/$/$f/" $f <<< see #2 mext
2-在sed中用引号("("$"表示行的末尾的问题:似乎shell正在试图解释它。
我刚刚从ksh过渡到zsh,遇到了它。
比我更能解释根本问题的人。
我的解决方案是将其保留在单引号中:
"s/$/$f/" => "s/"'$'"/$f/"
注意:你可以对最后一段进行双引号引用,但我的脚本要复杂得多,只对EOL'$'字符进行单引号引用更简单。