shell脚本中的字符串编辑

时间:2013-10-24 10:18:51

标签: shell sh

sh -version
GNU sh, version 1.14.7(1)

cat file

  

21 / Oct / 2013:21:29:29 +0530 10.104.x.x www.google.co.in   http://www.google.co.in/ads/user-lists/998935479/

我有一个带有上述模式的文件

grep -i http file | awk -F " " '{print $1","$3","$4","$5}'  > file2

使用上面的命令输出低于

  

21月/ 10月/ 2013:21:29:?29,10.104.x.x,www.google.co.in,http://www.google.co.in/ads/user-lists/998935479/

但我想要输出如下

  

21 /月/ 2013,21:29:?29,10.104.x.x,www.google.co.in,http://www.google.co.in/ads/user-lists/998935479/

我想在sap-rate值中分割日期和时间。请帮帮我。

3 个答案:

答案 0 :(得分:1)

使用sed

grep -i http test.txt | awk -F " " '{print $1","$3","$4","$5}' | sed 's/:/,/'

这是非常脆弱的,因为它假定第一个:需要成为,,但似乎在给定您的输入时它始终如此。

答案 1 :(得分:0)

你不需要grep|awk,如果你选择了awk,它可以为你做所有事情:

 awk -v OFS="," '/http/{sub(/:/,",",$1);print $1,$3,$4,$5}' file

答案 2 :(得分:0)

sed -n "
/[hH][tT][tT][pP]/ {
   s/^\([^ ]\{1,\}\) [^ ]\{1,\} \(.*\)/\1,\2/p
   }" File

sed -n "
/[hH][tT][tT][pP]/ {
   s/ +[0-9]\{1,} /,/p
   }" File

您可以将/[hH][tT][tT][pP]/替换为/${YourVariable}/ 在这种情况下,在shell

之前创建变量内容的[aA]版本