2015-09-18 1 views
0

У меня есть файл с таким родом записиУдалить все после определенной строки за исключением того, следует другой определенной строке

Hampton Inn New York Chelsea 
Holiday Inn Express 

Я хочу, чтобы очистить места после Inn, если Inn не сопровождается словом экспресс, используя SED , Это означает, что я хочу, чтобы это было

Hampton Inn 
Holiday Inn Express 

Как я мог сделать это с помощью sed?

ответ

1

Пробуйте этот путь также

sed 's/\(.*Inn\) \(Express\)\?.*/\1 \2/' FileName 

Объяснение:

\(.*Inn\)  - Match the content untile Inn 
\(Express\)\? - If the Express word match then only capture the word 
.*    - Discard all the remaining character 
\1    - Print the first group until Inn 
\2    - Print the second group (If the Express word match) 

Выход:

Hampton Inn 
Holiday Inn Express 
+0

Почему вы соответствуете Inn? – 123

+0

Из-за того, что нам нужно удалить контент после 'Inn' .... – Kalanidhi

+0

Да, не до того, как раньше, не нужно. * В начале, ничего не делает, кроме захвата больше, чем вам нужно ..... ..... – 123

1

Если Theres только один Inn в строке вы можете сделать

sed '/Inn Express/b;s/Inn.*/Inn/' file 

В качестве альтернативы, если вы хотите, чтобы удалить вещи после Express, а затем вы можете использовать

(GNU SED)

sed -r 's/(Inn (Express)?).*/\1/' file 
+0

Я понимаю, как ОП хочет удалите что-нибудь после 'Inn', если за ним не последует' Express', в этом случае второе решение всегда будет удалять все после 'Inn' excep t 'Express' возможно' sed -r 's/(Inn (Express. *)?). */\ 1 /' file' может работать вместо этого? – potong

1

Лучше всего было бы:

sed -E "s/^(.*[[:<:]]Inn[[:>:]](Express)?).*$/\1/" yourfile 

Я завернул "Inn" в границах слов, чтобы получить вещи правильно.

Почему?

Пусть ваш список:

Hampton Inn New York Chelsea 
Holiday Inn Express 
Sample Inn of Innovative People 

И ваше регулярное выражение:

sed -E "s/^(.*Inn(Express)?).*$/\1/" yourfile 

Это привело бы к этому неверному результату:

Hampton Inn 
Holiday Inn Express 
Sample Inn of Inn 
+0

Хороший комментарий, очень полезный действительно – user1848018

Смежные вопросы