Isso deve funcionar:
sed 's/ \([^ ]\)//g'
Você também pode substituir toda a última linha do script por:
sed -n '1s/ \([^ ]\)//gp' "$FILE"
O seguinte comando:
head -n 1 $FILE | tail -n 1
Puxa o texto da linha um de $FILE
. O formato de cada linha em $FILE
é o seguinte:
1 2 3 4 2 3 3 4 5 4 5 6 7 8 9
Como você pode ver, cada caractere é separado por um único espaço. Cada grupo é separado por dois espaços. Usando sed
, preciso remover os espaços simples e converter os espaços duplos em espaços únicos.
O texto em $FILE
é criado por um loop for aninhado dentro de outro para loop. Portanto, os dados de texto em cada linha são redirecionados >>
to $FILE
do loop principal depois que o aninhado é executado. Cada caractere / número na cadeia de texto é o resultado do loop aninhado para completar uma vez. Em seguida, o loop for principal envia a saída do loop for aninhado para $FILE
.
Então, um exemplo de pseudo-código seria:
for i in $(seq 1 $RANDOM)
do
for n in {1..10}
do
$do_something
done
$do_something_else
done >> $FILE
head -n 1 $FILE | tail -n 1 | (sed command here)
Como o código acima está estruturado não faz diferença para a necessidade aqui. Eu simplesmente procuro um método leve para a manipulação de texto descrita acima em relação aos espaços. Se isso foi perguntado antes, minhas desculpas. Não consegui encontrá-lo nas minhas perguntas.
Que tal isso:
$ head -n1 $FILE | tail -n 1 | sed 's, ,|,g' | sed 's, ,,g' | sed 's,|, ,g'
1234 23 345 456789
Primeiramente, substituímos todas as ocorrências de espaço duplo em branco por |
para distingui-las dos espaços em branco únicos, depois removemos todos os espaços em branco únicos e, finalmente, substituímos |
por um único espaço em branco.
Você pode fazer as substituições em um único comando s
em sed:
s/ \( \?\)//g
Para sair após a primeira linha, podemos usar q
na linha 1. Colocando juntos:
sed -e 's/ \( \?\)//g' -e '1q'
Tags bash bash-scripting