Regex 为什么sed和perl不使用<;解析文件;角色?
我正在尝试填充一些XML字段,以便在我正在执行的大量手动数据输入上为自己提供一个启动 我尝试使用正则表达式和2个平面文件来转换文本,如下所示:Regex 为什么sed和perl不使用<;解析文件;角色?,regex,perl,bash,sed,Regex,Perl,Bash,Sed,我正在尝试填充一些XML字段,以便在我正在执行的大量手动数据输入上为自己提供一个启动 我尝试使用正则表达式和2个平面文件来转换文本,如下所示: EA10A3 为此: <nodevice id="EA10A3" seq=" " /> 而不是 <nodevice id="EA10A1" seq=" " /> ? 我怎样才能做到这一点呢?你得到了 因为您的输入文件包含 EA10A1^M^J 使用(例如)dos2unix修复输入文件 (^M表示回车,^J表示换行。)您
EA10A3
为此:
<nodevice id="EA10A3" seq=" " />
而不是
<nodevice id="EA10A1" seq=" " />
?
我怎样才能做到这一点呢?你得到了
因为您的输入文件包含
EA10A1^M^J
使用(例如)dos2unix
修复输入文件
(^M表示回车,^J表示换行。)您得到的是
因为您的输入文件包含
EA10A1^M^J
使用(例如)dos2unix
修复输入文件
(^M代表回车,^J代表换行。)看起来像是
位置。txt
有DOS行结尾(\r\n
),而不是UNIX行结尾(\n
)。打印回车符\r
时,光标移动到行首,导致输出混乱
您可以使用cat-v
验证这一点,它将回车打印为^M
$ cat -v locations.txt
EA10A1^M
EA10A2^M
EA10A3^M
$ while read i; do cat platform | sed "s/PPPPPP/$i/g"; done < locations.txt | cat -v
<nodevice id="EA10A1^M" seq=" " />
<nodevice id="EA10A2^M" seq=" " />
<nodevice id="EA10A3^M" seq=" " />
看起来
locations.txt
有DOS行结尾(\r\n
),而不是UNIX行结尾(\n
)。打印回车符\r
时,光标移动到行首,导致输出混乱
您可以使用cat-v
验证这一点,它将回车打印为^M
$ cat -v locations.txt
EA10A1^M
EA10A2^M
EA10A3^M
$ while read i; do cat platform | sed "s/PPPPPP/$i/g"; done < locations.txt | cat -v
<nodevice id="EA10A1^M" seq=" " />
<nodevice id="EA10A2^M" seq=" " />
<nodevice id="EA10A3^M" seq=" " />
对我来说似乎是一个
dos2unix
问题。试着跑步
dos2unix locations.txt
perl -ne 'chomp ; printf ("<nodevice id=\"$_\" seq=\" \" / > \n");' locations.txt
dos2unix locations.txt
perl-ne'chomp;printf(“\n”);”locations.txt
对我来说似乎是一个dos2unix
问题。试着跑步
dos2unix locations.txt
perl -ne 'chomp ; printf ("<nodevice id=\"$_\" seq=\" \" / > \n");' locations.txt
dos2unix locations.txt
perl-ne'chomp;printf(“\n”);”locations.txt
您可能还需要在平台中转义“(\”)。@Phil Perry,嗯?不。插入到Perl代码中的是位置。你说的是转义到“
”?是的,没错。谢谢!你可能还需要在平台中转义“(\”。@Phil Perry,嗯?不。插入到Perl代码中的是位置。你说的是转义到”
?是的,成功了。谢谢谢谢你的详细回答。非常感谢。谢谢你更详细的回答。非常感谢。
$ dos2unix locations.txt
dos2unix: converting file blah.txt to Unix format ...
$ cat -v locations.txt
EA10A1
EA10A2
EA10A3
$ while read i; do cat platform | sed "s/PPPPPP/$i/g"; done < locations.txt | cat -v
<nodevice id="EA10A1" seq=" " />
<nodevice id="EA10A2" seq=" " />
<nodevice id="EA10A3" seq=" " />
dos2unix locations.txt
perl -ne 'chomp ; printf ("<nodevice id=\"$_\" seq=\" \" / > \n");' locations.txt