簡體   English   中英

使用bash從文本文件中刪除符號

[英]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中,您可以使用sedawk等文本處理工具。 假設文件名為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM