将行分隔值转换为语法

时间:2015-05-07 16:01:11

标签: linux bash perl unix

我收到了一个文本文件,它包含很多很多值,所有这些值一次分开一行,如下所示。 EX:

blue
red
orange
green
colors
hopefully
you
get
the
idea

我对命令行非常熟悉,并希望今天学到新东西。

我必须获取这些值并将它们插入语法中,每个值的语法都是相同的。

示例:

<a href="blue">
<a href="red">
<a href="orange">
<a href="green">
<a href="colors">

等等。

有些东西告诉我,复制粘贴不仅是解决这个问题的有效方法,也不是最有效的解决方案。

对此有什么看法?

感谢阅读。

6 个答案:

答案 0 :(得分:2)

awk可以很容易地做到这一点。注意:您应该关闭代码:

$ awk '{ print "<a href=\""$1"\"></a>" }' file 
<a href="blue"></a>
<a href="red"></a>
<a href="orange"></a>
<a href="green"></a>
<a href="colors"></a>
<a href="hopefully"></a>
<a href="you"></a>
<a href="get"></a>
<a href="the"></a>
<a href="idea"></a>

答案 1 :(得分:2)

使用sed,您可以参考与&的唯一匹配:

$ sed 's/.*/<a href="&">/' file
<a href="blue">
<a href="red">
<a href="orange">
<a href="green">
...

然后,需要在&附近添加所需的文字。

答案 2 :(得分:1)

如果你只是想做这个特定的例子,你可以简单地在每行前面加上字符并附加字符:

sed -i -e 's/^/<a href="/' -e 's/$/">/' yourfile

答案 3 :(得分:1)

你可以这样做:

#!/bin/bash 
while IFS= read line; do
line="<a href=\"$line\">"
echo "$line"
done <file.txt

如果要将输出重定向到单独的文件,则: 改变:

echo "$line"

为:

echo "$line" >> separate_file.txt

甚至更好: 改变

echo "$line"
done <file.txt

为:

echo "$line" # This is necessary and it won't print output 
done <file.txt > separate_file.txt

答案 4 :(得分:1)

举个例子,因为还没有perl答案 - 正如Tom所指出的那样:

“当然,perl答案可能只是awk答案perl -lne 'print "<a href=\"$_\">"' file或sed答案perl -pe 's/(.*)/<a href="$1">/' file"的直接端口。 这是真的 - perl可以“一个班轮”,并假装成其他人之一。

但在脚本中,我可能会这样做:

use strict;
use warnings;

my $prefix = q{<A HREF="};
my $suffix = q{">};

while ( my $line = <DATA> ) {
   chomp ($line);
   print "$prefix$line$suffix\n";
}


__DATA__
blue
red
orange
green
colors
hopefully
you
get
the
idea

我会问你到底想要完成什么 - 这不会生成有效的HTML,所以我怀疑你正在寻找一个不同的问题。

只是为了多样化 - 你可以假装你在这里组装XML:

use strict;
use warnings;
use XML::Twig;

my $xml = XML::Twig -> new( 'pretty_print' => 'indented' ); 
$xml -> set_root ( XML::Twig::Elt -> new ( 'HTML' ) );

while ( my $line = <DATA> ) {
   chomp ($line);
   $xml -> root -> insert_new_elt('last_child', "A", { "HREF" => $line }, "link to $line" );
}
$xml -> print;


__DATA__
blue
red
orange
green
colors
hopefully
you
get
the
idea

这会产生你:

<HTML>
  <A HREF="blue">link to blue</A>
  <A HREF="red">link to red</A>
  <A HREF="orange">link to orange</A>
  <A HREF="green">link to green</A>
  <A HREF="colors">link to colors</A>
  <A HREF="hopefully">link to hopefully</A>
  <A HREF="you">link to you</A>
  <A HREF="get">link to get</A>
  <A HREF="the">link to the</A>
  <A HREF="idea">link to idea</A>
</HTML>

在我看来,这是“汇编语法”的一个更好的例子,因为最好遵循正式/更严格的定义 - 比如XML。 (或JSON)。这些特别有用,因为它们具有可以解析的规范,因此使互操作更容易,而不是使用定制的文件/数据格式。

答案 5 :(得分:1)

Perl解决方案:

perl -lpe'$_ = qq{<a href="$_">}' colors.txt

perl -le'print qq{<a href="$_">}' colors.txt