[英]Use bash to remove symbols from text file
我有一堆包含以下內容的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
?
刪除行尾最多{
或}
所有內容
:%s/.*{\|}$//g
在bash
shell中,您可以使用sed
和awk
等文本處理工具。 假設文件名為ip.txt
1)使用sed
,這與我們在vim
使用的regex非常相似。 -i
標志允許就地進行更改,即它修改輸入文件本身。
$ sed -i 's/.*{\|}$//g' ip.txt
2)使用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
,請使用
sed -i 's/.*{\|}$//g' *.txt
:%s/^.*{\\(.*\\)}$/\\1/
或以bash sed 's/^.*{\\(.*\\)}$/\\1/ foo.txt
\\(.*\\)
是一個控制組,它進入\\1
,看起來像個笨拙的僵屍。
您可以在vim中使用它;
:%s/^.*{// | %s/}$//
您也可以使用此腳本; 首先運行此命令,如果一切正常,請使用-i選項取消注釋,如下所示;
#!/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; 就地替換
要么
僅用於以下用途;
sed -i 's/^.*{//;s/}$//' /dir/where/my/files/are/*
Perl可用於對所有文件進行替換:
perl -i -pe 's/.*{|}$//g' *.txt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.