Reputation: 381
I'm looking for how to delete the last word of a line in shell ! I use sed but I only found the way how delete the lase word of every line, but not a specify line. For exemple: I have a file test.db
key1 value1
key2 value2
key3 value3
And I just want to delete value3
sed -i s/'\w*$'// test.db
This line just delete the last word of every line !
Upvotes: 6
Views: 22372
Reputation: 58224
If you want to delete the last word only off of the last line, then you can use:
sed -i '$s/\w*$//' test.db
If you want to delete the last word from the line for key3
:
sed -i '/key3/s/\w*$//' test.db
Upvotes: 3
Reputation: 8412
Deleting the last word of your line
since you are targeting the line key3 value3
sed -i '/key3 value3/s/\S*$//' test.db
where \S is represents a digit that is not a space or whitespace.
Deleting the last word of a particular line (General rule)
sed -i '/line pattern/s/\S*$//' test.db
line pattern represents a pattern that is found on the line that you want to target
Upvotes: 1
Reputation: 41446
Here is an awk
to remove last field:
echo "one two three" | awk '{$NF="";sub(/[ \t]+$/,"")}1'
one two
Upvotes: 2
Reputation: 58351
This might work for you (GNU sed):
sed -r '$s/(\s*)\S+(\s*)$/\1\2/' file
this removes the last non-space token from the last line (keeping any surrounding white space).
To remove surrounding white space as well use:
sed -r '$s/\s*\S+\s*$//' file
Upvotes: 0