用sed解析开始和结束日期

时间:2012-07-24 10:06:53

标签: bash parsing sed

有人可以告诉我如何解决这个问题:

part1-part2-part3-2012-07-23-2012-07-23.csv

进入这个:

part1-part2-part3.csv

part1-part2-part3是另一个字符串的替换,所以不应该被视为常量。

我相信sed可能是这项工作的最佳工具,虽然我可以及时解决这个问题,但我的工作时间很紧。

任何帮助都非常感激。

7 个答案:

答案 0 :(得分:1)

$ echo 'part1-part2-part3-2012-07-23-2012-07-23.csv' |  \
  sed -re 's/^(.*)(-[0-9]+){6}(.*)$/\1\3/'
part1-part2-part3.csv

答案 1 :(得分:0)

这个sed命令完成了这项工作。它匹配一个日期并将其用作第二个匹配的组1,因为它们是相同的。

sed -e 's/\(-[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\)\1\(\.csv\)$/\2/'

答案 2 :(得分:0)

$ echo part1-part2-part3-2012-07-23-2012-07-23.csv | sed 's/-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]//'
part1-part2-part3.csv

此外,如果您知道需要删除-2012到行尾的所有字符 你可以做得更简单:

$ echo part1-part2-part3-2012-07-23-2012-07-23.csv | sed 's/-2012.*/.csv/'

答案 3 :(得分:0)

<强> INPUT.TXT

part1-part2-part3-2012-07-23-2012-07-23.csv

<强>代码

  

$&GT; sed&#39; s / [0-9] [0-9] // g&#39; Input.txt | sed&#39; s / --- * // g&#39;

<强>输出

part1-part2-part3.csv

答案 4 :(得分:0)

http://www.gnu.org/software/gawk/manual/html_node/Field-Separators.html

echo part1-part2-part3-2012-07-23-2012-07-23.csv | \
awk -v FS='-2012-07[^.]*' '{print $1 $2}'

答案 5 :(得分:0)

在这种情况下,

cutsed更简单:

fname=part1-part2-part3-2012-07-23-2012-07-23.csv
new_fname="$(echo $fname | cut -d- -f1-3).csv"

答案 6 :(得分:0)


$ echo part1-part2-part3-2012-07-23-2012-07-23.csv |
> awk -F '-' '{ print $1"-"$2"-"$3".csv" }'
part1-part2-part3.csv