Копирование файла в каталог назначения перезаписывает каталог файлом

Вы можете использовать параметр -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 '$='
3
09.01.2017, 17:12
3 ответа

Что могло быть причиной этой проблемы?

Учитывая

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/.
3
27.01.2020, 21:11

Думаю, вам следует ввести:

cp /home/user/Docs/test.txt /home/user/Dest/ 

вместо

cp /home/user/Docs/test.txt /home/user/Dest 

/ в конце означает, что местом назначения является каталог, а не файл.

5
27.01.2020, 21:11

Что может быть причиной этой проблемы?

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, чтобы избежать этих ошибок.

0
27.01.2020, 21:11

Теги

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