2015-01-06 3 views
5

Я ищу, как удалить последнее слово строки в оболочке! Я использую sed, но я нашел способ, как удалить слово lase каждой строки, но не указать строку. Для Exemple: У меня есть файл test.dbУдалить последнее слово строки в оболочке

key1 value1 
key2 value2 
key3 value3 

И я просто хочу, чтобы удалить Value3

sed -i s/'\w*$'// test.db 

Эта строка просто удалить последнее слово каждой строки!

+0

Как вы хотите, чтобы указать строку, чтобы удалить последнее слово из? – lurker

+0

jus предоставляет количество строк для ваших s, например, для первой строки: sed -i 1s/'\ w * $' // test.db – tinySandy

ответ

2

Если вы хотите удалить последнее слово только от последней строки, то вы можете использовать:

sed -i '$s/\w*$//' test.db 

Если вы хотите удалить последнее слово из линия для key3:

sed -i '/key3/s/\w*$//' test.db 
+0

Зачем использовать двойные кавычки для окружения sed команда, которая имеет побочные эффекты при использовании оболочки, т.е. '\ $'. Одиночные кавычки сделают команду намного яснее. – potong

+0

@potong действительно, спасибо, что указали это. – lurker

2

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

sed -i '1{s/[^ ]\+\s*$//}' file test.db 
+0

Для первой строки –

1

Удаление последнего слова вашей линии

, так как вы ориентируетесь линию key3 value3

sed -i '/key3 value3/s/\S*$//' test.db 

где \ S является представляет собой цифру, которая не является пробел или пробелы.

Удаление последнего слова конкретной линии (Общее правило)

sed -i '/line pattern/s/\S*$//' test.db 

линия образец представляет собой образец, который находится на линии, которую вы хотите целевой

0

Это может работать для вас (GNU СЭД):

sed -r '$s/(\s*)\S+(\s*)$/\1\2/' file 

это удаляет последний некосмическими маркер из последней строки (сохраняя любой окружающий белый зр туз).

Чтобы удалить окружающее пустое пространство, а также использовать:

sed -r '$s/\s*\S+\s*$//' file 
2

Вот awk удалить последнее поле:

echo "one two three" | awk '{$NF="";sub(/[ \t]+$/,"")}1' 
one two 
Смежные вопросы