如何提取多个值并在文件中打印正确的输出?

时间:2019-07-30 08:57:24

标签: linux bash shell

我想从文件名中提取多个值,并以特定顺序将其分配给* .csv文件(用分号;分隔),在1行上。

不幸的是,它只是将日期放入文件中,而将其他值直接放入外壳中,就像您通过回显命令一样

activemq
aomaap-report
aomaap-stats
5.14.1
5.14.1.rar
1.1.2
1.1.2.war
2.1.1
2.1.1.war
intil10377.echbruedom.local

日期显示在我的* .csv文件中:

Tue Jul 30 10:44:44 CEST 2019
~
~
~
~
~
~
~
~

这是我的实际命令。 ls -1 $path | grep -E ^.*ar$ | grep -Eo '[A-Za-z0-9_]{1,}...\w\w\w\w'; ls -1 $path | sed -n 's/.*-\(.*\)\..*/\1/p'; hostname; date > test4.csv

我希望所有值都排成一行并在文件中排序。像这样:

activemq;5.14.1;intil10377;Jul 30 10:44:44
~
~
~
~
~

有人可以帮我吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

{ ls -1 $path | grep -E ^.*ar$ | grep -Eo '[A-Za-z0-9_]{1,}...\w\w\w\w'; ls -1 $path | sed -n 's/.*-\(.*\)\..*/\1/p'; hostname; date; } | tr '\n' ';' | sed 's/;$/\n/' > test4.csv
  • 将您的整个命令括在{ }中,以捕获所有命令的输出
  • 使用;tr '\n' ';'替换所有换行符
  • 然后使用;用换行符替换最后一个sed 's/;$/\n/'
  • 将输出重定向到test4.csv文件
  • 请记住要引用您的变量。 ls -1 $path看起来不安全,更好ls -1 "$path"
  • 使用find比使用ls更可取。您可以使用一些find "$path" \! -name '*ar' -a -regex "something"等保存cpu。