Удалить весь текст используя sed - PullRequest
1 голос
/ 24 июня 2010

Формат:

[заглавное] {} "UC (ICL> ограничение)" (атрибуты); (глянец) * +1003 *

Файл testme.txt имеет 2 строки

[testme] {} "acetify" (V,lnk,CJNCT,AJ-V,VINT,VOO,VOO-CHNG,TMP,Vo) <H,0,0>; 
[newtest] {} "acid-fast" (ADJ,DES,QUAL,TTSM) <H,0,0>;

Ожидаемый результат такой:

testme = acetify
newtest = acid-fast

Что я достиг на данный момент:

cat testme.txt | sed 's / [// g' | sed 's /] // g' | sed 's / {} / = / g' | sed 's / \ "//'

testme = acetify" (V,lnk,CJNCT,AJ-V,VINT,VOO,VOO-CHNG,TMP,Vo) <H,0,0>;
newtest = acid-fast" (ADJ,DES,QUAL,TTSM) <H,0,0>;

Как убрать весь текст со второго "до конца строки"

Ответы [ 4 ]

1 голос
/ 24 июня 2010

Вся ваша последовательность нескольких вызовов sed может быть заменена на:

sed 's/\[\([^]]*\)][^"]*"\([^"]*\).*/\1 = \2/' inputfile
1 голос
/ 24 июня 2010

Весь процесс может быть немного быстрее с awk:

awk 'NF > 0 { print $1 " = " $3 }' testme.txt | tr -d '[]"'
1 голос
/ 24 июня 2010

это то, как вы делаете это с помощью awk вместо всех тех команд sed, что не нужно.то, что вы хотите, это поле 1 и поле 3. используйте gsub() для удаления кавычек и скобок

$ awk '{gsub(/\"/,"",$3);gsub(/\]|\[/,"",$1);print $1" = "$3}' file
testme = acetify
newtest = acid-fast
1 голос
/ 24 июня 2010

Удалите все после двойных кавычек-пробелов-пробелов " (:

sed 's/" (.*//g'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...