powiedzieć ciąg może być jak "a b" "c" "d", jak mogę sprawdzić, czy istnieje pojedynczy/podwójny cudzysłów i spacja zawarte w ciągu?jak sprawdzić, czy ciąg ma spacje w powłoce bash
Odpowiedz
Jak o podobnym podejściu do:
$ A="some string"; echo $A | grep \ | wc -l
1
$ A="somestring"; echo $A | grep \ | wc -l
0
?
string="a b '' c '' d"
if [ "$string" == "${string//[\' ]/}" ]
then
echo did not contain space or single quote
else
echo did contain space or single quote
fi
przenośny sposób to zrobić z grep
:
S="a b '' c '' d"
if echo $S | grep -E '[ "]' >/dev/null
then
echo "It's a match"
fi
... nieco brzydki, ale gwarantowane do pracy wszędzie.
Z opcją '-q' w grep,'>/dev/null' nie jest już potrzebny. Trochę ładniej. – Ray
Można użyć wyrażeń regularnych w bash:
string="a b '' c '' d"
if [[ "$string" =~ \ |\' ]] # slightly more readable: if [[ "$string" =~ (|\') ]]
then
echo "Matches"
else
echo "No matches"
fi
Edit:
Ze względów wyżej oczywistych, to lepiej umieścić regex w zmiennej:
pattern=" |'"
if [[ $string =~ $pattern ]]
I cytowania nie są konieczne w nawiasach kwadratowych. Nie można ich użyć po prawej stronie lub wyrażenie regularne zostaje zmienione na ciąg literowy.
najczystszy IMO, dla mnie dodałem także kartę, ale wygląda na nieco funky, bo musiałem wrzucić dolara-cytat tam "wzór =" | "" $ "| \ t'" - czy istnieje czystszy sposób? – nhed
@nhed: W przypadku pojedynczych znaków można użyć wzoru znaków zamiast alternatywnego znaku potoku. Może to być nieco mniej brzydki: 'pattern = $ '[\' \ t] ''. Możesz także użyć zmiennej: 'tab = $ '\ t'; pattern = "| '| $ tab" 'lub literalna zakładka (która nie jest dobra dla czytelności), wpisując ją za pomocą Ctrl-V-Tab. –
function foo() {
echo "String: $*"
SPACES=$(($#-1))
echo "Spaces: $SPACES"
QUOTES=0
for i in $*; do
if [ "$i" == "'" ]; then
QUOTES=$((QUOTES+1))
fi
done
echo "Quotes: $QUOTES"
echo
}
S="string with spaces"
foo $S
S="single' 'quotes"
foo $S
S="single '' quotes"
foo $S
S="single ' ' quotes"
foo $S
plony:
String: string with spaces
Spaces: 2
Quotes: 0
String: single' 'quotes
Spaces: 1
Quotes: 0
String: single '' quotes
Spaces: 2
Quotes: 0
String: single ' ' quotes
Spaces: 3
Quotes: 2
[[ "$str" = "${str%[[:space:]]*}" ]] && echo "no spaces" || echo "has spaces"
Zauważ, że to nie wykrywa tabulatorów ani linii prostych, dla tych, którzy są ciekawi –
Zastanawiam się dlaczego nikt nie wspomniał o [: space:] ustawiony. Zwykle nie tylko interesuje Cię wykrywanie charakteru przestrzeni. Często potrzebuję wykryć dowolną białą przestrzeń, np. PATKA. Przykład "grep" będzie wyglądał następująco:
$ echo " " | egrep -q "[:space:]" && echo "Has no Whitespace" || echo "Has Whitespace"
Has Whitespace
$ echo "a" | egrep -q "[:space:]" && echo "Has no Whitespace" || echo "Has Whitespace"
Has no Whitespace
Dla zainteresowanych tym rozwiązaniem, mój 'grep' informuje mnie, że' składnia klasy postaci jest [[: spacja:]], nie [: spacja: ] '. W przeciwnym razie doskonałe rozwiązanie! – jdferreira
Ponieważ pytanie jest oznaczone jako "bash", nie trzeba uruchamiać innego procesu tylko po to, aby przetestować ciąg znaków: "case" $ String "in * [[: space:]] *) echo" match ";; esac' –
- 1. Jak sprawdzić, czy UITextField w iOS ma puste spacje
- 2. Jak sprawdzić, czy ciąg zaczyna się od innego w bash?
- 3. Jak sprawdzić ciąg mający tylko spacje w JavaScript
- 4. bash: jak sprawdzić, czy ciąg zaczyna się od "#"?
- 5. Jak sprawdzić, czy ciąg ma wartość zerową w python?
- 6. Jak mogę sprawdzić, czy ciąg znaków zawiera znaki i spacje, a nie tylko białe spacje?
- 7. Sprawdź, czy ciąg ruby zawiera białe spacje.
- 8. Usuń puste przestrzenie z przecinkiem w ciągu w powłoce bash
- 9. iOS: jak sprawdzić, czy ciąg ma tylko cyfry?
- 10. Jak sprawdzić, czy ciąg znaków ma określony wzorzec?
- 11. Jak sprawdzić, czy ciąg znaków jest pusty w eliksiru
- 12. Bash: Jak sprawdzić, czy istnieją pewne pliki?
- 13. Wartość NSURL idzie null, gdy parametr ciąg url ma spacje ..?
- 14. W Bash, jak można sprawdzić, czy ciąg nie jest w tablicy?
- 15. Jak sprawdzić, czy ciąg znaków jest xml?
- 16. Bash - Jak wywołać funkcję zadeklarowaną w powłoce rodzica?
- 17. Jak mogę sprawdzić, czy łańcuch ma w Pythonie wartość liczbową?
- 18. Jak sprawdzić, czy plik ma więcej niż 1 linię w warstwie BASH?
- 19. Jak sprawdzić, czy zmienna ma parzystą (nieparzystą) wartość liczbową w bash?
- 20. Jak sprawdzić, czy proces ma uprawnienia administracyjne
- 21. Jak sprawdzić, czy klasa ma atrybut DataContract?
- 22. Jak sprawdzić, czy obiekt ma określoną właściwość?
- 23. Jak sprawdzić, czy iPhone ma podwójny aparat?
- 24. Jak sprawdzić, czy ciąg jest numeryczny?
- 25. Jak sprawdzić, czy SQLDataReader nie ma wierszy
- 26. Jak sprawdzić, czy selektor ma qtip?
- 27. jak sprawdzić, czy uitableview ma wybraną komórkę
- 28. Jak sprawdzić, czy obiekt ma funkcję? (Dojo)
- 29. Szyny: Jak sprawdzić, czy kolumna ma wartość?
- 30. Jak sprawdzić, czy liczba ma dziesiętną?
Dlaczego chcesz to zrobić? Jeśli próbujesz, powiedzmy, sprawdzić "nieprawidłową" nazwę pliku, możesz zamiast tego naprawić skrypt, aby obsługiwał nazwy plików ze spacjami lub cudzysłowami. Na przykład. –
Czy chcesz powiedzieć, że chcesz wiedzieć, że: a) istnieje pojedynczy/podwójny cudzysłów wokół przestrzeni b) pojedynczy/podwójny cytat wraz z spacja c) coś zupełnie innego od tego? – ezpz
Wystarczy sprawdzić, czy ciąg ma jakąkolwiek pojedynczą wycenę i czy ma jakąś przestrzeń – derrdji