我有一堆包含这样的东西的txt文件:
text_i_need_to_remove{text_i_need_to_retain}
text_i need_to_remove{text_i_need_to_retain}
...
如何在大括号(和大括号本身)之前删除文本并仅保留text_i_need_to_retain
?
答案 0 :(得分:4)
删除行尾<{1}}或{
的所有内容
}
从:%s/.*{\|}$//g
shell,您可以使用bash
和sed
等文字处理工具。假设文件名为awk
1)使用ip.txt
,这与我们在sed
内使用的正则表达式非常相似。 vim
标志允许进行更改,即修改输入文件本身。
-i
2)使用$ sed -i 's/.*{\|}$//g' ip.txt
,可以再次使用替换,或者在这种情况下,在大括号上拆分行并仅使用第二列。
awk
如果您有$ awk -F'{|}' '{print $2}' ip.txt > tmp && mv tmp ip.txt
,则可以选择GNU awk
进行现场编辑
-i inplace
要更改当前目录中的所有文件,请使用
$ gawk -i inplace -F'{|}' '{print $2}' ip.txt
如果他们有共同的扩展名,请说sed -i 's/.*{\|}$//g' *
,请使用
.txt
答案 1 :(得分:3)
:%s/^.*{\(.*\)}$/\1/
或bash,sed 's/^.*{\(.*\)}$/\1/ foo.txt
\(.*\)
是一个控制组,可以输入\1
,看起来像一个笨重的僵尸。
答案 2 :(得分:2)
你可以在vim中使用它;
:%s/^.*{// | %s/}$//
你也可以使用这个脚本;首先运行这个,如果everythink没问题,请使用-i选项取消注释sed,如下所示;
#!/bin/bash
for item in $(ls /dir/where/my/files/are)
do
sed -i 's/^.*{//;s/}$//' /dir/where/my/files/are/$item
done
sed -i; inplace replace
或
仅使用如下;
sed -i 's/^.*{//;s/}$//' /dir/where/my/files/are/*
答案 3 :(得分:1)
Perl可用于对所有文件进行替换:
perl -i -pe 's/.*{|}$//g' *.txt