2

请有人可以让我知道我将如何解决这个问题:

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

进入这个:

part1-part2-part3.csv

是对另一个字符串的part1-part2-part3替换,因此不应被视为常量。

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

任何帮助都非常感谢。

4

7 回答 7

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


$ echo part1-part2-part3-2012-07-23-2012-07-23.csv |
> awk -F '-' '{ print $1"-"$2"-"$3".csv" }'
part1-part2-part3.csv
于 2012-07-24T13:11:47.993 回答
0

cutsed在这种情况下更简单:

fname=part1-part2-part3-2012-07-23-2012-07-23.csv
new_fname="$(echo $fname | cut -d- -f1-3).csv"
于 2012-07-24T12:41:10.733 回答
0

输入.txt

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

代码

$> sed 's/[0-9][0-9]//g' Input.txt | sed 's/---*//g'

输出

part1-part2-part3.csv
于 2012-07-24T10:51:00.133 回答
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}'
于 2012-07-24T10:57:30.680 回答
0

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

sed -e 's/\(-[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\)\1\(\.csv\)$/\2/'
于 2012-07-24T10:11:51.577 回答
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/'
于 2012-07-24T10:12:08.047 回答