2016-03-28 2 views
0

У меня есть большой файл, где каждая строка имеет видКак заменить части линий определенной формы?

b d 

где b и d являются числами. Я хотел бы изменить все строки в форме

b -1 

к

b 1 

, где b произвольное число (то есть оно должно оставаться неизменным).

Для конкретного примера, файл

0.2 0.5 
0.1 -1 
0 -1 
0.3 0.6 

должен стать

0.2 0.5 
0.1 1 
0 1 
0.3 0.6 

Есть простой способ добиться этого с помощью, скажем, sed или подобный инструмент?

Редактировать. Достаточно удалить все файлы - из файла. Благодаря @Cyrus для этого наблюдения. Эта конкретная проблема теперь решена, однако общий вопрос о том, как сделать замену файлов таким образом более общим шаблоном, остается открытым. Ответы по-прежнему приветствуются.

+1

Вы хотите удалить все '-' из файла? – Cyrus

+1

Ну, теперь, когда вы упомянули об этом, да, проблема эквивалентна проблеме удаления всех '-' из файла. Хорошее наблюдение. :-) Я не думал об этом, потому что средняя бесконечность '-1' и эти файлы представляют собой [градуированный модуль] (https://en.wikipedia.org/wiki/Graded_ring#Graded_module). – blazs

ответ

2

Попробуйте это:

tr -d '-' <old_file> new_file 

или заменить все -1 в колонке 2, 1:

awk '$2==-1 {$2=1} 1' old_file > new_file 

или GNU СЭД:

sed 's/ -1$/ 1/' old_file > new_file 

Если вы хотите отредактировать файл с GNU sed "in place" использовать опцию sed -i:

sed -i 's/ -1$/ 1/' file 
Смежные вопросы