Aku punya string seperti itu:
|abcdefg|
Dan aku ingin mendapatkan string baru yang disebut di bagaimanapun (seperti string2) dengan string asli tanpa dua karakter |
di awal dan di akhir itu sehingga saya akan memiliki ini:
abcdefg
Mungkin di bash?
Yang dapat anda lakukan
string="|abcdefg|"
string2=${string#"|"}
string2=${string2%"|"}
echo $string2
Atau jika panjang string adalah konstan, yang dapat anda lakukan
string="|abcdefg|"
string2=${string:1:7}
echo $string2
Juga, ini harus bekerja
echo "|abcdefg|" | cut -d "|" -f 2
Juga ini
echo "|abcdefg|" | sed 's/^|\(.*\)|$/\1/'
Pergi beberapa tulisan yang tercantum di sini tampaknya cara yang paling sederhana untuk melakukannya adalah:
string="|abcdefg|"
echo ${string:1:-1}
edit: bekerja pada ubuntu dengan bash 4.2; tidak bekerja pada centOS dengan bash 4.1
Dan satu lagi:
string="|abcdefg|"
echo "${string//|/}"
Anda juga dapat menggunakan sed untuk menghapus | tidak hanya referensi simbol itu sendiri tetapi menggunakan posisi sebagai referensi dalam:
$ echo "|abcdefg|" | sed 's:^.\(.*\).$:\1:'
abcdefg
Mana ':' adalah pembatas (anda dapat menggantinya dengan / atau setiap karakter tidak dalam permintaan, ada tanda-tanda berikut s akan melakukan itu) di Sini ^ (caret) berarti pada awal masukan string dan $ (dolar) berarti di akhir. Yang . (titik) itu's setelah karet dan satu yang's sebelum tanda dolar mewakili satu karakter. Jadi dengan kata lain kita menghapus pertama dan karakter terakhir. Di pikiran ini akan menghapus semua karakter bahkan jika | it's tidak hadir dalam string.
EX:
$ echo "abcdefg" | sed 's:^.\(.*\).$:\1:'
bcdef
Sedikit lebih verbose pendekatan, tetapi bekerja pada setiap jenis pertama dan karakter terakhir, doesn't harus sama. Ide dasar adalah bahwa kita mengambil variabel, membaca karakter demi karakter, dan menambahkan hanya orang-orang kita ingin variabel baru
Berikut ini's bahwa seluruh ide diformat ke dalam fungsi bagus
crop_string_ends() {
STR="$1"
NEWSTR=""
COUNT=0
while read -n 1 CHAR
do
COUNT=$(($COUNT+1))
if [ $COUNT -eq 1 ] || [ $COUNT -eq ${#STR} ]
then
continue
fi
NEWSTR="$NEWSTR"$CHAR
done <<<"$STR"
echo $NEWSTR
}
Dan di sini adalah fungsi yang sama dalam tindakan:
$> crop_string_ends "|abcdefg|"
abcdefg
$> crop_string_ends "HelloWorld"
elloWorl
>>> mystring="|abcdefg|"
>>> print(mystring[1:-1])
abcdefg
atau pada baris perintah:
$ python -c 'import sys;print sys.stdin.read()[1:-2]' <<< "|abcdefg|"
abcdefg
$ echo "|abcdefg|" | awk '{print substr($0,2,length($0)-2)}'
abcdefg
$ ruby -ne 'print $_.split("|")[1]' <<< "|abcdefg|"
abcdefg
$ string="|abcdefg|" $ string="${string#?}" && string="${string%%?}" $ echo "$string" abcdefg
Dari http://tldp.org/LDP/abs/html/parameter-substitution.html
${var#Pola}
Hapus dari$var
yang singkat bagian dari$Pola
yang sesuai dengan front end dari$var
.${var%%Pola}
Hapus dari$var
yang terpanjang bagian dari$Pola
yang sesuai dengan belakang dari$var
.