我有一个.txt文件,每个新行上的[]之间标有日期和时间,然后是事后的其他文本。我想在时间戳和名称之后只保留文本,那么我如何使用sed替换在bash中编码呢? 时间戳具有不同的字符长度,名称也是如此。
所以输入将是 -
[11/26/17, 9:08:01 AM] Sean: sample text sample text
[8/8/18, 10:54:23 AM] Keith: sample sample sample
[3/8/18, 6:40:25 AM] John Doe: more text more text more text
[12/8/18, 12:40:30 AM] Jane Doe: abcd 1234 text text
期望的输出:
sample text sample text
sample sample sample
more text more text more text
abcd 1234 text text
答案 0 :(得分:2)
解决方案1: 以下awk
解决方案可能对您有帮助。
awk '{sub(/.*: /,"")} 1' Input_file
解决方案第二: 如果您想将输出保存到Input_file本身,那么以下内容可能对您有帮助。
awk '{sub(/.*: /,"")} 1' Input_file > temp_file && mv temp_file Input_file
解决方案3: 如果您想要备份Input_file并将输出保存到Input_file本身,那么以下内容可能对您有帮助。
sed -i.bak 's/.*: //' Input_file
答案 1 :(得分:0)
sed
假设您的文本文件名为sample.txt
,您可以这样做:
$ sed 's/.*: //' sample.txt
sample text sample text
sample sample sample
more text more text more text
abcd 1234 text text
$
或者像这样:
$ cat sample.txt | sed 's/.*: //'
sample text sample text
sample sample sample
more text more text more text
abcd 1234 text text
$
sed命令的说明:
sed
命令位于单引号'
之间,因此其字符不会被解释为shell特殊字符,在本例中为*
。
s/patter_to_substitute/substitute_with_this/
s
是sed替换命令。它将前两个/
之间的正则表达式匹配的内容替换为第二个和第三个/
之间的内容。所以它会替换.*:
匹配的内容,因为第二个和第三个/
之间没有任何内容。
.*:
匹配任何字符(.
)零次或多次(*
),直到冒号后跟空格(:
)。
答案 2 :(得分:0)
您是否尝试过使用剪切工具?以下命令应该起作用:
cat <file> | cut -d':' -f2