🐧 Как с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ sed ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ послСдний символ ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки Π½Π° Linux

by itisgood
МнС Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ послСдний символ ΠΈΠ· строки ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Β«${_ allow_ips}Β».
НапримСр, каТдая строка Π² ΠΌΠΎΠ΅ΠΌ Ρ„Π°ΠΉΠ»Π΅ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
ΠΌΠΎΠΉ Ρ„Π°ΠΉΠ»:
foo,
bar,
demo,
МнС Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
foo
bar
demo.
Как ΠΆΠ΅ ΠΌΠ½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ sed, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ послСдний символ?
Sed – это бСсплатный Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ для Linux, macOS, * BSD ΠΈ Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… систСм.
Он идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для удалСния послСднСго символа ΠΈ выполнСния Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΏΡ†ΠΈΠΉ для Π²Π°ΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ.

УдаляСм с sedΒ  послСдний символ ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки

Π Π°Π±ΠΎΡ‚Π° с sed всС довольно простая, ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»ΠΎ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ манипулирования тСкстом.

Бинтаксис ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ для поиска ΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹ тСкста Π½Π° sed:

sed 's/search/replace/' input > output
sed -i'.BAK' 's/search/replace/' input
sed 's/search/replace/' <<<"${var}"
НапримСр, ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ послСднюю Ρ†ΠΈΡ„Ρ€Ρƒ (скаТСм, 6) ΠΈΠ· строки Π²Π²ΠΎΠ΄Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
echo "this is a test6" | sed 's/.$//'
Β«.Β» (Ρ‚ΠΎΡ‡ΠΊΠ°) ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ любой символ Π² sed, Π° Β«$Β» ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ† строки.
Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Β«.$Β» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послСдний символ.
Π”Π°Π»Π΅Π΅ ΠΌΡ‹ создадим Ρ„Π°ΠΉΠ» ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ cat:
cat > demo.txt
Π”ΠΎΠ±Π°Π²ΠΈΠΌ тСкст ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
this is a test,
I love Unix,
I like Linux too,
Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ послСдний символ Β«,Β» ΠΈΠ· demo.txt для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ sed:
sed 's/.$//' demo.txt > output.txt
## Linux GNU/sed version syntax ##
sed -i 's/.$//' demo.txt
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ это:
cat demo.txt
cat output.txt

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΎΠ± условном ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ послСднСго символа

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π° sed, использованная Π΄ΠΎ сих ΠΏΠΎΡ€, удаляСт всС послСдниС символы.

Но, скаТСм, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†ΠΈΡ„Ρ€ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

echo "I love Pizza6" | sed 's/[0-9]$//'
echo "The best blog in Unixverse3" | sed 's/[[:digit:]]$//'
echo "I love Pizza6Times" | sed 's/[0-9]$//'

Β«[0-9]Β«/Β»[[: digit:]]Β» ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ всС Ρ†ΠΈΡ„Ρ€Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ 0, 1, 2, 3, 4, 5, 6, 7, 8 ΠΈ 9.
Аналогично, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π±ΡƒΠΊΠ²Ρ‹:
echo "I love donuts two times a dayz" | sed 's/[[:alpha:]]$//'
echo "I love donuts 2 times a dayZ" | sed 's/[[:upper:]]$//'

Команда Sed выраТСния

ΠšΠ»Π°ΡΡΡ‹ Π‘Π˜ΠœΠ’ΠžΠ›ΠžΠ’
ΠžΠŸΠ˜Π‘ΠΠΠ˜Π•
[[:alnum:]]
Π‘ΡƒΠΊΠ²Π΅Π½Π½ΠΎ-Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅ символы: β€˜[[:alpha:]]’ ΠΈ β€˜[[:digit:]]’; Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ Β«CΒ» ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ ASCII это Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ Β«[0-9A-Za-z]Β».
[[:alpha:]] Π‘ΡƒΠΊΠ²Π΅Π½Π½Ρ‹Π΅ символы: β€˜[[:lower:]]’ ΠΈ β€˜[[:upper:]]’; Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ “C” ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ ASCII это Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ “[A-Za-z]”.
[[:blank:]] ΠŸΡƒΡΡ‚Ρ‹Π΅ символы: ΠΏΡ€ΠΎΠ±Π΅Π» ΠΈ табуляция.
[[:cntrl:]]
Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ символы. Π’ ASCII эти символы ΠΈΠΌΠ΅ΡŽΡ‚ Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ ΠΎΡ‚ 000 Π΄ΠΎ 037 ΠΈ 177 (DEL). Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π½Π°Π±ΠΎΡ€Π°Ρ… символов это эквивалСнтныС символы, Ссли ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ.
[[:digit:]]
Π¦ΠΈΡ„Ρ€Ρ‹: 0 1 2 3 4 5 6 7 8 9.
[[:graph:]]
ГрафичСскиС символы: β€˜[[:alnum:]]’ ΠΈ β€˜[[:punct:]]’.
[[:lower:]]
Π‘Ρ‚Ρ€ΠΎΡ‡Π½Ρ‹Π΅ Π±ΡƒΠΊΠ²Ρ‹; Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ Β«CΒ» ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ символов ASCII это b c d e f g h i j klm n o p q r s t u v w x y z.
[[:print:]] ΠŸΠ΅Ρ‡Π°Ρ‚Π½Ρ‹Π΅ символы: β€˜[[:alnum:]]’, β€˜[[:punct:]]’ ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π».
[[:punct:]]
Π—Π½Π°ΠΊΠΈ ΠΏΡƒΠ½ΠΊΡ‚ΡƒΠ°Ρ†ΠΈΠΈ; Π² Π»ΠΎΠΊΠ°Π»ΠΈ β€˜C’ ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ ASCII это! ”# $% &β€˜ () * +, -. /:; <=>? @ [\] ^ _ `{
[[:space:]] Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ ΠΏΡ€ΠΎΠ±Π΅Π»Π°: Π² Π»ΠΎΠΊΠ°Π»ΠΈ Β«CΒ» это Π²ΠΊΠ»Π°Π΄ΠΊΠ°, новая строка, Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ табуляция, ΠΏΠΎΠ΄Π°Ρ‡Π° Ρ„ΠΎΡ€ΠΌΡ‹, Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π».
[[:upper:]] Π‘ΡƒΠΊΠ²Ρ‹ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ рСгистрС: Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ Β«CΒ» ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ ASCII это A B C D E F G H I J K L M N O P Q R S T U V W X Y Z.
[[:xdigit:]]
ШСстнадцатСричныС Ρ†ΠΈΡ„Ρ€Ρ‹: 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ с ΠΈΠΌΠ΅Π½Π΅ΠΌ IP ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

IP="192.168.2.25,"
printf "%s\n" $IP
Допустим, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ послСдний символ с  β€˜,β€˜, запуститС:
## Π£Π΄Π°Π»ΠΈΡ‚ΡŒ послСдний символ ΠΈΠ· $IP ##
sed 's/,$//' <<<"${IP}"
## ΠΈΠ»ΠΈ ## 
echo $IP | sed 's/.$//' 
## МоТно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ большС IP Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ² ',' ##
IP="192.168.2.200,$IP"
IP="192.168.5.253,$IP"
## Обновим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΡƒΠ΄Π°Π»ΠΈΠ² ',' ##
IP=$(sed 's/,$//' <<<"${IP}")
echo "${IP}"

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ послСдний символ ΠΈΠ· тСкстового Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Π² Linux ΠΈ Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… систСмах. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ awk, ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ cut, Perl / Python ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

 

You may also like

Leave a Comment