nói một chuỗi có thể giống như "a b '' c '' d", làm cách nào tôi có thể kiểm tra xem có dấu ngoặc kép và dấu cách đơn/đôi nào có trong chuỗi không?cách kiểm tra xem chuỗi có dấu cách trong bash shell
Trả lời
Làm thế nào về một cách tiếp cận tương tự như:
$ 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
Cách di động để làm điều này là với grep
:
S="a b '' c '' d"
if echo $S | grep -E '[ "]' >/dev/null
then
echo "It's a match"
fi
... một chút xấu xí, nhưng được bảo đảm để làm việc ở khắp mọi nơi.
Với tùy chọn '-q' trong grep,'>/dev/null' không cần nữa. Một chút đẹp hơn. – Ray
Bạn có thể sử dụng biểu thức thông thường trong bash:
string="a b '' c '' d"
if [[ "$string" =~ \ |\' ]] # slightly more readable: if [[ "$string" =~ (|\') ]]
then
echo "Matches"
else
echo "No matches"
fi
Edit:
Vì lý do rõ ràng ở trên, nó tốt hơn để đưa các regex trong một biến:
pattern=" |'"
if [[ $string =~ $pattern ]]
Và dấu ngoặc kép không cần thiết bên trong dấu ngoặc vuông kép. Chúng không thể được sử dụng ở bên phải hoặc regex được thay đổi thành một chuỗi chữ.
IMO sạch nhất, đối với tôi, tôi cũng đã thêm tab nhưng trông hơi sôi nổi vì tôi phải ném đồng đô la trong đó 'pattern =" | '"$' | \ t'' - có cách nào sạch hơn không? – nhed
@nhed: Trong trường hợp các ký tự đơn, bạn có thể sử dụng mẫu ký tự thay vì thay đổi ký tự ống. Điều này có thể hơi kém xấu xí: 'pattern = $ '[\' \ t] ''. Bạn cũng có thể sử dụng một biến: 'tab = $ '\ t'; pattern = "| '| $ tab" 'hoặc tab chữ (không tốt cho khả năng đọc) bằng cách nhập nó bằng cách sử dụng 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
sản lượng:
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"
lưu ý rằng điều này không phát hiện các tab hoặc dòng mới, đối với những người tò mò –
Tôi tự hỏi tại sao không ai đề cập đến [: space:] thiết lập. Thông thường, bạn không chỉ quan tâm đến việc phát hiện nhân vật không gian. Tôi thường cần phát hiện bất kỳ khoảng trắng nào, ví dụ: CHUYỂN HƯỚNG. Ví dụ "grep" sẽ trông giống như sau:
$ 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
Đối với những người quan tâm đến giải pháp này, 'grep' của tôi thông báo cho tôi rằng cú pháp của lớp ký tự là [[: space:]] chứ không phải [: space: ] '. Nếu không, giải pháp tuyệt vời! – jdferreira
Vì câu hỏi được gắn thẻ "bash", không cần phải bắt đầu quá trình khác chỉ để kiểm tra chuỗi: 'case" $ String "trong * [[: space:]] *) echo" match ";; esac' –
- 1. Cách kiểm tra xem tệp có rỗng trong Bash không?
- 2. Cách kiểm tra xem tệp có chứa chuỗi cụ thể không bằng cách sử dụng bash
- 3. Xóa dấu cách trống bằng dấu phẩy trong một chuỗi trong bash shell
- 4. Cách kiểm tra xem chuỗi có nằm trong mảng không?
- 5. Cách kiểm tra SharedPreferences từ adb shell?
- 6. Cách kiểm tra xem chuỗi có chứa khoảng trắng không
- 7. Cách tìm chuỗi con trong biến tập lệnh bash shell
- 8. Kiểm tra xem chuỗi có chứa Asterisk (*)
- 9. Làm cách nào để kiểm tra xem chuỗi có tồn tại trong tệp có vỏ Bash không?
- 10. Làm cách nào để kiểm tra xem dòng có trống trong tập lệnh shell không?
- 11. Làm cách nào để kiểm tra xem lệnh có tồn tại trong tập lệnh shell không?
- 12. Kiểm tra tập lệnh Shell
- 13. Kiểm tra xem chuỗi có chứa số
- 14. Làm cách nào để kiểm tra xem chuỗi chuỗi có chứa một chuỗi trong JavaScript không?
- 15. Kiểm tra xem chuỗi có bắt đầu bằng XXXX
- 16. Cách kiểm tra xem JCheckBox có được kiểm tra không?
- 17. Cách kiểm tra xem chuỗi có bắt đầu bằng một chuỗi khác trong C không?
- 18. Kiểm tra xem chuỗi có trống không
- 19. Kiểm tra ngày tệp có bash
- 20. Cách kiểm tra chuỗi đầu vào trong bash ở định dạng phiên bản (n1.n2.n3)
- 21. Kiểm tra xem chuỗi có chứa chuỗi con
- 22. Kiểm tra xem chuỗi có chứa tất cả "?"
- 23. Cách kiểm tra xem lệnh bash có được thực hiện thành công hay không
- 24. Cách kiểm tra xem công việc nền có còn hoạt động không? (Bash)
- 25. cách kiểm tra xem NSString = giá trị chuỗi cụ thể?
- 26. cách kiểm tra xem ký tự có bằng dấu ngoặc kép trong java
- 27. Cách kiểm tra xem ký tự Unicode có dấu phụ trong .Net?
- 28. Kiểm tra xem stderr là một đường ống trong bash
- 29. Cách kiểm tra xem một dòng có một trong các chuỗi trong danh sách không?
- 30. Cách kiểm tra xem chuỗi có chứa chuỗi con đã cho không?
Tại sao bạn muốn thực hiện việc này? Nếu bạn đang cố gắng, giả sử, hãy kiểm tra tên tệp "không hợp lệ", thay vào đó bạn có thể sửa tập lệnh để hỗ trợ tên tệp có dấu cách hoặc dấu ngoặc kép. Ví dụ. –
Bạn có nói rằng bạn muốn biết rằng: a) có một trích dẫn đơn/đôi xung quanh một không gian b) một dấu nháy đơn/kép cùng với một không gian c) một cái gì đó hoàn toàn khác với điều đó? – ezpz
Chỉ cần kiểm tra xem một chuỗi có bất kỳ trích dẫn nào và nếu nó có bất kỳ dấu cách nào – derrdji