Câu trả lời:
Đánh giá ngắn mạch sau grep
:
grep -q 'search_pattern' /file && : >/newfile
grep -q
không tạo đầu ra trên STDOUT, chỉ thoát với trạng thái thoát 0
nếu tìm thấy mẫu trên tệp
Nếu mẫu được tìm thấy ( &&
), hãy tạo một tệp /newfile
bằng cách : >/newfile
.
Bạn cũng có thể đi theo touch /newfile
cách tiếp cận thông thường , hoặc trên bash
, một chuyển hướng trống - >/newfile
cũng sẽ làm như vậy.
Chỉ cần lưu ý, nếu tệp đã tồn tại thì touch
sẽ chỉ thay đổi dấu thời gian có liên quan mà không cắt bớt tệp. Và chuyển hướng trống >/newfile
không được hỗ trợ trên tất cả các vỏ khi đang di chuyển (ví dụ: trong zsh
), nơi bạn phải gửi EOF theo cách thủ công.
:
?
:
là viết tắt cho true
, đó là lệnh không hoạt động luôn thoát với trạng thái thoát 0.
Chỉ để cho vui:
python3 -c "if 'string' in open('logfile').read(): open('newfile', 'wt')"
trong đó 'string'
được thay thế bằng chuỗi (điều kiện), 'logfile'
được thay thế bằng đường dẫn đến logfile, 'newfile'
được thay thế bằng đường dẫn thực tế đến tệp để tạo, tất cả trong dấu ngoặc đơn, ví dụ như trong ví dụ.
Bạn có thể sử dụng awk với system()
lệnh của nó . Nếu /pattern/
tìm thấy, codeblock {}
sẽ được thực thi, trong trường hợp này chúng ta gọi touch /tmp/my_file.txt
thông qua system()
lệnh.
Ví dụ dưới đây cho thấy việc tạo một tệp tạm thời nếu có người dùng của tôi hiện diện /etc/passwd
.
$ awk '/xieerqi/{system("touch /tmp/my_file.txt")}' /etc/passwd
$ ls -l /tmp/my_file.txt
-rw-rw-r-- 1 xieerqi xieerqi 0 1月 25 07:58 /tmp/my_file.txt
Ngoài ra, chúng tôi có thể sử dụng chuyển hướng để tập tin:
awk '/xieerqi/{f="/tmp/my_file.txt";print "" > f;close(f)}' /etc/passwd
grep
để tìm kiếm. Các-q
tùy chọn sẽ ngăn chặn tất cả các đầu ra, và quay trở lại trận đấu / nonmatch quagrep
's mã thoát, đó là dễ dàng kiểm chứng.