Использование grep для получения количества файлов, в которых есть ключевое слово

У меня такая же проблема. Я пытаюсь установить монго дб. Я вызываю команду./mongod, и установка не может быть завершена. Зависает на той же команде:

2019-09-21T21:45:17.039+0600 I SHARDING [LogicalSessionCacheReap] Marking collection config.transactions as collection version:

Mac OS Мохаве 10.14 Весь мой след:

MacBook-Pro-dns:mongo user$./mongod
2019-09-21T21:45:16.178+0600 I  CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2019-09-21T21:45:16.187+0600 I  CONTROL  [initandlisten] MongoDB starting : pid=8310 port=27017 dbpath=/data/db 64-bit host=MacBook-Pro-dns.local
2019-09-21T21:45:16.187+0600 I  CONTROL  [initandlisten] db version v4.2.0
2019-09-21T21:45:16.187+0600 I  CONTROL  [initandlisten] git version: a4b751dcf51dd249c5865812b390cfd1c0129c30
2019-09-21T21:45:16.187+0600 I  CONTROL  [initandlisten] allocator: system
2019-09-21T21:45:16.187+0600 I  CONTROL  [initandlisten] modules: none
2019-09-21T21:45:16.187+0600 I  CONTROL  [initandlisten] build environment:
2019-09-21T21:45:16.187+0600 I  CONTROL  [initandlisten]     distarch: x86_64
2019-09-21T21:45:16.187+0600 I  CONTROL  [initandlisten]     target_arch: x86_64
2019-09-21T21:45:16.187+0600 I  CONTROL  [initandlisten] options: {}
2019-09-21T21:45:16.189+0600 W  STORAGE  [initandlisten] Detected unclean shutdown - /data/db/mongod.lock is not empty.
2019-09-21T21:45:16.189+0600 I  STORAGE  [initandlisten] Detected data files in /data/db created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
2019-09-21T21:45:16.189+0600 W  STORAGE  [initandlisten] Recovering data from the last clean checkpoint.
2019-09-21T21:45:16.189+0600 I  STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=7680M,cache_overflow=(file_max=0M),session_max=33000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=[recovery_progress,checkpoint_progress],
2019-09-21T21:45:16.699+0600 I  STORAGE  [initandlisten] WiredTiger message [1569080716:699859][8310:0x10e6245c0], txn-recover: Recovering log 1 through 2
2019-09-21T21:45:16.762+0600 I  STORAGE  [initandlisten] WiredTiger message [1569080716:762524][8310:0x10e6245c0], txn-recover: Recovering log 2 through 2
2019-09-21T21:45:16.825+0600 I  STORAGE  [initandlisten] WiredTiger message [1569080716:825486][8310:0x10e6245c0], txn-recover: Main recovery loop: starting at 1/22912 to 2/256
2019-09-21T21:45:16.826+0600 I  STORAGE  [initandlisten] WiredTiger message [1569080716:826288][8310:0x10e6245c0], txn-recover: Recovering log 1 through 2
2019-09-21T21:45:16.884+0600 I  STORAGE  [initandlisten] WiredTiger message [1569080716:884735][8310:0x10e6245c0], txn-recover: Recovering log 2 through 2
2019-09-21T21:45:16.932+0600 I  STORAGE  [initandlisten] WiredTiger message [1569080716:932134][8310:0x10e6245c0], txn-recover: Set global recovery timestamp: (0,0)
2019-09-21T21:45:17.002+0600 I  RECOVERY [initandlisten] WiredTiger recoveryTimestamp. Ts: Timestamp(0, 0)
2019-09-21T21:45:17.019+0600 I  STORAGE  [initandlisten] Timestamp monitor starting
2019-09-21T21:45:17.020+0600 I  CONTROL  [initandlisten] 
2019-09-21T21:45:17.020+0600 I  CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-09-21T21:45:17.020+0600 I  CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2019-09-21T21:45:17.020+0600 I  CONTROL  [initandlisten] 
2019-09-21T21:45:17.020+0600 I  CONTROL  [initandlisten] ** WARNING: This server is bound to localhost.
2019-09-21T21:45:17.020+0600 I  CONTROL  [initandlisten] **          Remote systems will be unable to connect to this server. 
2019-09-21T21:45:17.020+0600 I  CONTROL  [initandlisten] **          Start the server with --bind_ip <address> to specify which IP 
2019-09-21T21:45:17.020+0600 I  CONTROL  [initandlisten] **          addresses it should serve responses from, or with --bind_ip_all to
2019-09-21T21:45:17.020+0600 I  CONTROL  [initandlisten] **          bind to all interfaces. If this behavior is desired, start the
2019-09-21T21:45:17.020+0600 I  CONTROL  [initandlisten] **          server with --bind_ip 127.0.0.1 to disable this warning.
2019-09-21T21:45:17.020+0600 I  CONTROL  [initandlisten] 
2019-09-21T21:45:17.020+0600 I  CONTROL  [initandlisten] 
2019-09-21T21:45:17.020+0600 I  CONTROL  [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000
2019-09-21T21:45:17.031+0600 I  SHARDING [initandlisten] Marking collection local.system.replset as collection version: <unsharded>
2019-09-21T21:45:17.034+0600 I  STORAGE  [initandlisten] Flow Control is enabled on this deployment.
2019-09-21T21:45:17.034+0600 I  SHARDING [initandlisten] Marking collection admin.system.roles as collection version: <unsharded>
2019-09-21T21:45:17.034+0600 I  SHARDING [initandlisten] Marking collection admin.system.version as collection version: <unsharded>
2019-09-21T21:45:17.035+0600 I  SHARDING [initandlisten] Marking collection local.startup_log as collection version: <unsharded>
2019-09-21T21:45:17.036+0600 I  FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'
2019-09-21T21:45:17.039+0600 I  SHARDING [LogicalSessionCacheRefresh] Marking collection config.system.sessions as collection version: <unsharded>
2019-09-21T21:45:17.039+0600 I  NETWORK  [initandlisten] Listening on /tmp/mongodb-27017.sock
2019-09-21T21:45:17.039+0600 I  NETWORK  [initandlisten] Listening on 127.0.0.1
2019-09-21T21:45:17.039+0600 I  NETWORK  [initandlisten] waiting for connections on port 27017
2019-09-21T21:45:17.039+0600 I  SHARDING [LogicalSessionCacheReap] Marking collection config.transactions as collection version: <unsharded>```
3
24.11.2020, 14:42
4 ответа

Я бы лично использовал findвместе с grepдля подсчета:

find. -type f -name '*.sas' -exec grep -q -e 'pattern' {} \; -exec echo x \; |
wc -l

Добавьте -maxdepth 1перед первым -exec, если вы не хотите, чтобы findрекурсивно переходил в подкаталоги.

Это означает запуск grep -q -e 'pattern'для каждого файла с суффиксом имени файла .sasв текущем каталоге или ниже. Для каждого файла, которому соответствует pattern, echo xбудет выведено x. Количество строк, выводимых echoтаким образом, затем подсчитывается wc -l. Мы считаем xes вместо имен файлов с wc, поскольку имена файлов могут содержать символы новой строки.

Для не -рекурсивного варианта этого вы также можете выбрать простой цикл оболочки:

for name in./*.sas; do
    [ ! -f "$name" ] && continue
    grep -q -e 'pattern' "$name" && echo x
done | wc -l

или,

n=0
for name in./*.sas; do
    [ ! -f "$name" ] && continue
    grep -q -e 'pattern' "$name" && n=$((n + 1))
done
echo "$n"

Если ваш patternне регулярное выражение, а строка, используйте вместо него grep -q -F -e 'string'.

4
18.03.2021, 22:47
find $DIR  -type f  -name '*.sas'  -exec grep -m1 -e 'pattern' {} \; | wc -l

С опцией -m1 grepбудет выводить не более 1 строки на файл, поэтому wc -lдаст вам правильное количество файлов, содержащих этот шаблон.

3
18.03.2021, 22:47
grep -rl --include='*.sas' keyword. | wc -l

Будет работать, если пути к файлам не содержат символов новой строки.

Чтобы работать с ними, вам нужно переключиться на записи с разделителями NUL -вместо строк:

grep -rlZ --include='*.sas' keyword. | tr -cd '\0' | wc -c

(обратите внимание, что -r/ -Z/ --includeне являются стандартными расширениями -и *.sasне будут соответствовать именам файлов, которые содержат последовательности байтов, не образующие допустимые символы в локали (, например $'st\xe9phane.sas'в локали UTF -8 )).

2
18.03.2021, 22:47
\grep -rh -i -m1 --include='*.sas' -e 'pattern' |wc -l

-h:не выводить имя файла. не сломается тогда в файле/пути, содержащем новую строку.
-m1:остановить чтение остальной части файла, как только будет найдено первое совпадение
-r:рекурсивный
-i:совпадение без учета регистра
-e:использовать ШАБЛОН как шаблон ; избегайте обработки -как идентификатора переключателя grep, если он находится в начале шаблона.


На AU также есть мой ответ, который я считаю полезным просмотреть и использовать для быстрого просмотра каждого переключателя, о котором вы хотите узнать, вместо того, чтобы искать/прокручиватьman grep:

2
18.03.2021, 22:47

Теги

Похожие вопросы