Como usar sed para substituir a data atual? -- bash campo com scripts campo com calendar campo com sed camp askubuntu Relacionado O problema

How to use sed to substitute current date?


2
vote

problema

português

Como faço para usar sed para substituir a data por uma palavra. Eu tentei fazer isso:

  tmp=`date +%d` echo $tmp if [ $tmp -lt 10 ] then         pat="d"         echo $pat else         pat="dd"         echo $pat fi cal | sed "s/$tmp/$pat/"    

e a saída é assim:

  robin@robin-VirtualBox:~/lx$ bash p13.sh 27 dd      April 2014        Su Mo Tu We Th Fr Sa          1  2  3  4  5    6  7  8  9 10 11 12   13 14 15 16 17 18 19   20 21 22 23 24 25 26   27 28 29 30               

edit:

Eu quero a data 27 para alterar para dd , como aqui:

       April 2014        Su Mo Tu We Th Fr Sa          1  2  3  4  5    6  7  8  9 10 11 12   13 14 15 16 17 18 19   20 21 22 23 24 25 26   dd 28 29 30               
english

How do I use sed to substitute date by a word. I tried doing this:

tmp=`date +%d` echo $tmp if [ $tmp -lt 10 ] then         pat="d"         echo $pat else         pat="dd"         echo $pat fi cal | sed "s/$tmp/$pat/" 

And the output is like so:

robin@robin-VirtualBox:~/lx$ bash p13.sh 27 dd      April 2014        Su Mo Tu We Th Fr Sa          1  2  3  4  5    6  7  8  9 10 11 12   13 14 15 16 17 18 19   20 21 22 23 24 25 26   27 28 29 30            

Edit:

I want the date 27 to change into dd, like in here:

     April 2014        Su Mo Tu We Th Fr Sa          1  2  3  4  5    6  7  8  9 10 11 12   13 14 15 16 17 18 19   20 21 22 23 24 25 26   dd 28 29 30            
           
       
       

Lista de respostas

3
 
vote
vote
Melhor resposta
 

tl; dr: use -h ao usar cal

por quê?

O comando cal imprime o dia atual com caracteres especiais ("destacando"?). Eu descobri isso salvá-lo em um arquivo e usando nano ( não cat ) para ler:

  $ cal >> out $ nano out    

Agora você verá o seguinte:

       Abril 2014 do lu ma mi ju vi sá        1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 _^H2_^H7 28 29 30    

ao lado do espanhol (desculpe) 27 não é com caracteres simples.

Agora, se você usar -h isso é resolvido:

  $ cal -h >> out2 $ nano out2    

Sua saída deve ser assim para que você possa analisá-lo sem problemas:

       Abril 2014 do lu ma mi ju vi sá        1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30    

solução

no seu script Substitua cal0 com cal1


fonte: http: // netbsd .gw.com / cgi-bin / man-cgi? CAL + 1 + Netbsd-Corrent

 

TL;DR: Use -h when using cal

Why?

The cal command prints the current day with special characters ("highlighting"?). I found out this saving it to a file and using nano (not cat) to read it:

$ cal >> out $ nano out 

Now you will see the following:

     Abril 2014 do lu ma mi ju vi sxc3xa1        1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 _^H2_^H7 28 29 30 

Beside Spanish (sorry) 27 is not with simple characters.

Now if you use -h this is solved:

$ cal -h >> out2 $ nano out2 

Your output should be like this so you can parse it without problems:

     Abril 2014 do lu ma mi ju vi sxc3xa1        1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 

Solution

In your script replace cal | sed "s/$tmp/$pat/" with cal -h | sed "s/$tmp/$pat/"


Source: http://netbsd.gw.com/cgi-bin/man-cgi?cal+1+NetBSD-current

 
 
4
 
vote

Aparentemente, você não pode analisar A saída do BSD CAL para o dia atual. Isso é porque é destacado. Se você desativar a realce com o botão ABCDEFGHIJKLMNABCDEFGHIJKLMN12 , ele funcionará:

  cal3   

Para identificar a saída de CAL, verifique a strace:

  cal4   
 

Apparently you cannot parse the output of BSD cal for the current day. This is because it's highlighted. If you turn off highlighting with the -h switch, it will work:

xe2x9ex9c  ~  cal -h | sed "s/$tmp/$pat/"      Abril 2014        do lu ma mi ju vi sxc3xa1          1  2  3  4  5    6  7  8  9 10 11 12   13 14 15 16 17 18 19   20 21 22 23 24 25 26   dd 28 29 30            

To identify the output of cal, check the strace:

strace cal [...] # tons of lines here write(1, "       1  2  3  4  5  \n", 23       1  2  3  4  5   ) = 23 write(1, " 6  7  8  9 10 11 12  \n", 23 6  7  8  9 10 11 12   ) = 23 write(1, "13 14 15 16 17 18 19  \n", 2313 14 15 16 17 18 19   ) = 23 write(1, "20 21 22 23 24 25 26  \n", 2320 21 22 23 24 25 26   ) = 23 write(1, "\33[7m27\33[27m 28 29 30           \n", 3227 28 29 30            ) = 32 write(1, "                      \n", 23                       ) = 23 exit_group(0)                           = ? 
 
 

Perguntas relacionadas

3  Remova tudo antes da primeira ocorrência da palavra especificada  ( Remove everything before first occurence of specified word ) 
Como posso remover tudo antes da primeira ocorrência de uma palavra especificada usando sed ? O que eu tentei até agora: echo $(cat /etc/nginx/sites-ena...

0  Como usar o comando sed para procurar string com caractere "/" nele e substitua por alguma outra string?  ( How to use of sed command to search string with character in it and replace ) 
Eu executo o comando: sed 's/http:///www/' filename Na saída, este comando não substituiu "http: //" com "www" por quê? e como alterar o delimitador ...

1  SED / AWK - Remova todas as tags, exceto apenas duas tags e textos simples  ( Sed awk remove all tags except only two tags and plain texts ) 
Aqui está uma amostra para o meu arquivo de texto: <w:r><w:t> <w:r w:rsidR="00D171FD"> <w:t></w:t> </w:r><w:r> <w:t xml:space="preserve"> This is a sample ...

1  Substitua apenas alguns números usando SED [FECHADO]  ( Replace only certain numbers using sed ) 
. fechado . Esta pergunta precisa detalhes ou clareza . Atualmente não está aceitando respostas. ...

2  Como executar programaticamente novas linhas vazias de um arquivo?  ( How to programatically remove empty new lines from a file ) 
Eu preciso remover novas linhas vazias do arquivo de texto no terminal. arquivo de exemplo 123 123 123 123 123 123 Eu procurei no Google um pouco...

1  Usando sed para adicionar caracteres no final de uma linha adiciona uma nova linha  ( Using sed to add characters at the end of a line adds a new line ) 
Eu estou fazendo um script para converter algumas varetas mágicas de um formato para outro. Eu preciso inserir o código SET para cada cartão no final da linha...

4  Como encontrar texto e substituir essa linha Se existir com o terminal de outra forma apenas anexar linha para finalizar  ( How to find text and replace that line if exists with terminal otherwise just ap ) 
Eu quero colocar em sudo gedit /etc/sysctl.conf a única linha vm.swappiness=10 que às vezes altero. Por padrão, esta linha não existe, então eu uso ech...

15  Regex com comando sed para analisar texto json  ( Regex with sed command to parse json text ) 
Eu tenho este texto JSON: { "buildStatus" : { "status" : "ERROR", "conditions" : [{ "status" : "OK", "m...

4  Remover citações em torno de números inteiros em um arquivo CSV  ( Remove quotes around integers in a csv file ) 
em um grande arquivo csv (& gt; 1 gb) eu tenho algo como "34432", "name", "0", "very long description" Mas em vez disso gostaria de ter 34432, "name...

7  Como substituir as strings no arquivo sem regex?  ( How to replace strings in file without regex ) 
Eu preciso substituir algumas strings em arquivos (da linha de comando), mas não quero usar sed -i porque minha string contém muitos caracteres engraçados q...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.