使用sed替换模式中的无标题换行符



我在安装了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'$'字符进行单引号引用更简单。

最新更新