Вы можете использовать параметр -c
команды grep. И вы можете удалить все символы до первой запятой и все, начиная со второй запятой, с помощью sed
:
sed 's/^[^,]*,//;s/,.*//' < the_file | grep -c -E '[^0]'
РЕДАКТИРОВАТЬ: Эта команда sed
делает то же самое, что и ваша cut
, поэтому вы также сможете использовать исходную команду grep
.
РЕДАКТИРОВАТЬ2: Если вы хотите использовать только одну команду, вы можете использовать ответ @cuonglm grp. Если вы хотите использовать только один вызов из sed
, потребуется много работы с метками, чтобы суммировать количество строк в конце.
sed -E -n '
s/^[^,]*,[^0,]+,.*/+1/ # replace the lines we are interested in with "+1"
T delete_line # if we did not do a substitution right now we jump to "delete_line"
H # we did not jump (so we did the substitution and append the "+1" to the hold space
: delete_line # the label, here we do nothing (silently drop the current line)
$ { # on the last line we ...
s/.*/0/ # replace the whole line with "0"
G # append the hold space (all the "+1" from before")
s/\n//g # remove all newlines
p # print the line
}' < the_file
Теперь это можно передать по конвейеру bc
, или вы можете заменить команду p
сложной магией sed
, чтобы суммировать эти числа в sed
. Кажется, я слышал, что sed
завершен по Тьюрингу, поэтому это должно быть возможно.
Если вы хотите использовать только одну программу ( sed
), но не хотите вызывать ее несколько раз, это намного проще:
sed '/^[^,]*,0,.*/d' < the_file | sed -n '$='
Что могло быть причиной этой проблемы?
Учитывая
cp /home/user/Docs/test.txt /home/user/Dest
, если каталог / home / user / Dest
еще не существует, файл / home / user / Docs / test .txt
будет скопирован в файл с именем / home / user / Dest
.
Как ответил @HamdiKadri, добавление /
к месту назначения как / home / user / Dest /
гарантирует, что / home / user / Dest
обрабатывается как каталог. Вы также можете написать это как
cp /home/user/Docs/test.txt /home/user/Dest/.
Думаю, вам следует ввести:
cp /home/user/Docs/test.txt /home/user/Dest/
вместо
cp /home/user/Docs/test.txt /home/user/Dest
/
в конце означает, что местом назначения является каталог, а не файл.
Что может быть причиной этой проблемы?
cp /home/user/Docs/test.txt /home/user/Dest
Выполняя приведенную выше команду, вы копируете содержимое файла test.txt
в / файл home/user/Dest
. Если файла уже нет, он создаст новый файл с именем Dest
и скопирует в него содержимое. Чтобы убедиться, что ваш файл скопирован в нужную директорию, укажите в конце /
. например
cp /home/user/Docs/test.txt /home/user/Dest/
Кроме того, если вы используете терминал, используйте клавишу Tab, чтобы избежать этих ошибок.