Обработка текста - Замените секунду от начала и секунду от конца в строке

Вам не хватает некоторых переменных среды, скорее всего, DISPLAY . Вы можете попробовать следующее:

echo "foo"                                                   
DISPLAY=:0.0 notify-send "Battery-Low"                                    
echo "bar"

Если это не поможет, вы можете сравнить среду внутри сценария и в терминале, выполнив команду env в обоих.

Также обратите внимание, что если сценарий запускается от имени пользователя root, вам, возможно, придется сделать что-то вроде этого:

sudo -u yourUsername DISPLAY=:0.0 notify-send 'Battery low'
4
14.05.2018, 21:12
5 ответов

Aquí hay una awkforma :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
        }
}
5
27.01.2020, 20:46

Usando sedharías:

sed 's/,/,"/2; s/\(,[^,]*,[^,]*\)$/"\1/' infile

Este s/,/,"/2reemplaza solo al segundo. Este s/\(,[^,]*,[^,]*\)$coincide con ,anything-not-a-comma,anything-not-a-commadesde 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

3
27.01.2020, 20:46
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.

0
27.01.2020, 20:46

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
3
27.01.2020, 20:46

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.

2
27.01.2020, 20:46

Теги

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