Вам не хватает некоторых переменных среды, скорее всего, DISPLAY
. Вы можете попробовать следующее:
echo "foo"
DISPLAY=:0.0 notify-send "Battery-Low"
echo "bar"
Если это не поможет, вы можете сравнить среду внутри сценария и в терминале, выполнив команду env
в обоих.
Также обратите внимание, что если сценарий запускается от имени пользователя root, вам, возможно, придется сделать что-то вроде этого:
sudo -u yourUsername DISPLAY=:0.0 notify-send 'Battery low'
Aquí hay una awk
forma :si hay más de cinco campos delimitados por comas -, luego recorra los campos "centrales" concatenándolos antes de imprimir el nuevo campo entre comillas, seguido de los dos campos finales:
awk -f awkscript.awk < input
Con lo siguiente comoawkscript.awk
:
BEGIN {
OFS=","
FS=","
}
{
if (NF > 5) {
middle=""
for(i=3; i <= NF-2; i++)
middle=(middle ? middle"," : "")$i
print $1, $2, "\""middle"\"", $(NF-1), $NF
} else {
print $1, $2, "\""$3"\"", $4, $5
}
}
Usando sed
harías:
sed 's/,/,"/2; s/\(,[^,]*,[^,]*\)$/"\1/' infile
Este s/,/,"/2
reemplaza solo al segundo. Este s/\(,[^,]*,[^,]*\)$
coincide con ,anything-not-a-comma,anything-not-a-comma
desde el final $
de la línea como una coincidencia de grupo con la referencia posterior -de \1
, luego, en la pieza de reemplazo, después de agregar una cita, lo recuperamos"\1
sed -e '
s/,/&\n/2
s/\n\(.*\)\(,.*,.*\)/"\1"\2/
' input.csv
perl -pe '
my $p;
while ( /,/g ) {
s/\G/"/,next if ++$p == 2;
last if s/,\G(?=.*,)(?!.*,.*,)/",/; # looks for 2nd last comma
}
' input-file.csv
perl -pe '
substr($_, index($_, q/,/, 1+index($_, q/,/)), 1) = q/,"/;
substr($_, rindex($_, q/,/, -1+rindex($_, q/,/)), 1) = q/",/;
' csvfile
Aquí invocamos la función de índice dos veces para obtener la posición de la segunda coma desde la izquierda. Luego coloque una comilla junto a él usando la función substr ahora que se ha determinado la posición.
De manera similar, invocamos la función rindex y hacemos el cambio correspondiente.
Aquí hay un enfoque estúpidamente simple, aunque probablemente no sea el más eficiente:
sed 's/,/,"/2' input.csv | rev | sed 's/,/,"/2' | rev > output.csv
perl :Эта версия заключает в кавычки все поля и обрабатывает любые «внутренние» кавычки
$ cat file
field,field2,text field with potential commas,field4,field5
field,field2,text fie,ld with pot,ential commas,field4,field5
field,field2,text field with, potential commas,field4,field5
field,field2,"Just drive," she said,f4,f5
$ perl -F, -lane '
@result = ( splice(@F,0,2), undef, splice(@F,@F-2,2) );
$result[2] = join ",", @F;
print join ",", map {s/"/""/g; qq/"$_"/} @result
' file
"field","field2","text field with potential commas","field4","field5"
"field","field2","text fie,ld with pot,ential commas","field4","field5"
"field","field2","text field with, potential commas","field4","field5"
"field","field2","""Just drive,"" she said","f4","f5"
Первая строка кода извлекает первые 2 и последние 2 поля данных.
Вторая строка собирает все остальные данные как 3-е поле.
Третья строка выводит в формате CSV.