我如何将完整文件转换为特定格式?

我如何将完整文件转换为特定格式?

我有一个 1 GB 的文件,想将其转换为某种格式。该文件包含以下 URL:

google.com
trafficinviter.com
example.com

我想转换以下格式的完整内容:

"http://google.com","http://trafficinviter.com","http://example.com"

使用 Ubuntu。这正是 PHP 数组的格式。所以我想知道如何转换为这种格式并保存到另一个文件。

答案1

我将在 Perl 中这样做:

$ perl -lne 'printf "\"http://$_\","' file | sed 's/,$/\n/'
"http://google.com","http://trafficinviter.com","http://example.com"

删除-l每行末尾的换行符(还会\n在每个print调用中添加一个,这就是我使用的原因printf)。-ne意思是“在输入文件的每一行上运行 给出的脚本-e。脚本本身将打印"http://、当前行($_)和",。然后,sed删除最后的尾随逗号。


或者,你可以这样做:

$ sed 's#^#"http://#;s#$#"#' file | tr "\n" "," | sed 's/,$/\n/'
"http://google.com","http://trafficinviter.com","http://example.com"

这里,第一个sed将用 替换每行的开头(^) ,用 替换"http://每行的结尾( ) ;用逗号替换每个换行符,第二个将删除最后一个尾随的逗号。$"trsed

答案2

你可以这样做:

tr '\n' ',' < file | sed 's#[^,]\+#"http://&"#g;s#,$#\n#'

解释

  • tr '\n' ',' <file用逗号替换换行符file
  • |管道输出至
  • s#[^,]\+#"http://&"#g将一系列字符(不包括逗号)替换为前面http://和后面带有“引号”的相同字符
  • s#,$#\n#删除最后一个逗号,用换行符替换

注意:如果 URL 中有逗号,此操作将会失败,因此,如果您的情况可能如此,请使用terdon 的回答获得可靠的结果

答案3

Awk 解决方案

awk '{ printf("\"%s\",", $0) }' input.txt

如果我没记错的话,PHP 允许在数组文字中终止逗号。

相关内容