Удалить строку из файла, начинающуюся с цифры в bash - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь создать простой редактор CSV в Bash,и я борюсь с удалением строки.Пользователь передает в IDстрока для удаления (каждая строка определяется с идентификатором в качестве первого столбца).Это пример структуры файла:

ID,Name,Surname
0,Mark,Twain
1,Cristopher,Jones

Итак, сохраняя идентификатор в качестве переменной и имя файла в другой переменной (скажем, в файле file.csv), я пытаюсь удалить его из bash с помощью следующей строки:

read -p "Pass the object's ID: " idtoremove
fname=file.csv
sed -i -e "'/^$idtoremove*,/d'" $fname

Однако это не влияет на файл.Что может быть не так с этой строкой?

Кроме того, как я могу заменить строку, начинающуюся с данного идентификатора, строкой из переменной?Это еще одна проблема, с которой мне придется столкнуться, но я понятия не имею, как к ней подойти.

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Следующий скрипт может вам помочь.Он просит пользователя ввести идентификатор.

cat script.ksh
echo "Please enter the id to be removed:"
read value
awk -v val="$value" -F, '$1!=val'  Input_file

В случае, если вы хотите сохранить вывод в самом файле Input_file, добавьте > tmp_file && mv tmp_file Input_file в коде выше awk.

С sed:

cat script.ksh
echo "Please enter the id to be removed:"
read value
sed  "/^$value,/d"  Input_file

Пожалуйста, используйте опцию sed -i.bak выше sed, чтобы сохранить выходные данные в сам файл Input_file ииметь резервную копию файла Input_file (до изменения).

0 голосов
/ 08 июня 2018

Лучше всего это сделать в awk:

awk -v id="$idtoremove" -F, '$1 != id' file.csv

Если вы используете gnu awk, вы также можете сохранить на месте:

awk -i inplace -v id="$idtoremove" -F, '$1 != id' file.csv

Для других awk версии используют:

awk -v id="$idtoremove" -F, '$1 != id' file.csv > $$.csv &&
mv $$.csv file.csv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...