Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 为什么sed和perl不使用<;解析文件;角色?_Regex_Perl_Bash_Sed - Fatal编程技术网

Regex 为什么sed和perl不使用<;解析文件;角色?

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表示换行。)您

我正在尝试填充一些XML字段,以便在我正在执行的大量手动数据输入上为自己提供一个启动

我尝试使用正则表达式和2个平面文件来转换文本,如下所示:

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