提问人:Adam James Dietrick 提问时间:11/9/2023 更新时间:11/9/2023 访问量:56
在输入和输出中使用通配符将文本替换为 SED
Replacing Text With SED Using a Wildcard in the Input and The Output
问:
我正在尝试清理一些数据,但我有一个日期和时间一起运行的区域。理想情况下,以下是我想做的任何示例。当然,有两位数的日期,但不会有两位数的小时数。日期前也总是有一个前导空格。
所以变成了Nov 86:00
Nov 8, 6:00
我想对 8 和 6 都使用通配符,但我没有弄清楚如何正确处理。这是我所拥有的:
sed -i 's/ *:/I DONT KNOW WHAT TO DO HERE/g' /tmp/showtimes.raw
答:
0赞
choroba
11/9/2023
#1
您需要括号来介绍捕获组。它们从左边开始编号。使用带有数字的反斜杠来引用它们:
sed 's/\( [0-9][0-9]\?\)\([0-9]:\)/\1, \2/'
~~~~~~~~~~~~~ ~~~~~~
Capture group Capt.g.
#1 #2
评论
0赞
Adam James Dietrick
11/10/2023
谢谢,明天当我回到那台电脑时,我会尝试一下。
0赞
Adam James Dietrick
11/10/2023
这很有效,谢谢。这就是我如何调整它以在我的脚本中工作。sed -i 's/( [0-9][0-9]\?)([0-9]:)/\1, \2/' /tmp/放映次数.raw
1赞
HatLess
11/11/2023
如果您发现某个答案有用,请接受它作为答案,而不是说谢谢。
0赞
Adam James Dietrick
11/11/2023
我正在尝试类似的替换,如果它们继续一个数字并用一个空格和相同的数字替换,则基本上删除两个空格。我收到此错误:sed:-e expression #1,char 17:未终止请帮忙sed -i 's/( [0-9]\?)/ \1' /tmp/showtimes.raw
0赞
choroba
11/11/2023
@AdamJamesDietrick:提出一个新问题,提出一个新问题。
0赞
Cyrus
11/9/2023
#2
这应该可以完成 GNU 的工作,如果正如你所写的,小时数只有一个数字。sed
echo 'Nov 86:00' | sed -E 's/(.*)(....)$/\1, \2/'
输出:
Nov 8, 6:00
评论
0赞
Adam James Dietrick
11/10/2023
谢谢,明天当我回到那台电脑时,我会尝试一下。
0赞
Adam James Dietrick
11/10/2023
在命令行中工作得很好,但是当我将其调整到我的脚本时,它会发回一个关于 3 的错误。另一个建议的代码(由 choroba 提供)有效。知道为什么没有吗?sed -i -E 's/(.*)(....)$/\1, \2/' /tmp/showtimes.raw
评论