Oneliners с awk
от @steeldriver сделают свою работу, но если вы хотите, чтобы шеллскрипт bash читал строки, вы можете сделать это следующим образом:
#!/bin/bash
set -e
set -o pipefail
filename="0101.tsv"
while IFS= read -r line
do
s=0
len=${#line}
# echo "line=$line"
# echo "len=$len"
for (( i=0; i<$len; i++ ))
do
if [ "${line:i:1}" == $'\t' ]
then
s=$((s +1))
fi
done
echo $s
if [[ "$s" == "995" ]]; then
printf "%s\n" "$line"
continue
fi
done < "$filename" > abc.tsv
Это соответствует идее @roaima использовать вспомогательный файл для записи целевого:
Войдите в систему как root, создайте простой скрипт с именем write-to-file
и следующим кодом:
echo $1 > /etc/test.txt
(он должен быть размещен в /usr/local/bin и должен иметь только root разрешение на выполнение ).
Как обычный пользователь, вы можете запускать его откуда угодно:
echo 'password' | sudo -S write-to-file "hello!"
Таким образом, одна строка передается как стандартный ввод, а другая — как аргумент.
примечание:Я не знаю, может ли это решение привести к дыре в безопасности. На мой взгляд, это должно быть так же безопасно, как и обычное использование sudo
.