Apagando linhas em branco no vim
Essa pode ser útil para muitos, para apagar todas as linhas em branco de um arquivo aberto no vim, digite o seguinte comando no editor:
:g/^$/:delete
ou seja:
g = global, documento inteiro
^ = início de linha
$ = final de linha
PS.: o padrão ^$ significa tudo que não tem nada entre o início e final de linha
:delete = apagar a linha que casa com o padrão acima
ou
Eliminando linhas em branco
Para eliminar linhas em branco de um arquivo texto, utilize qualquer um dos comandos:
$ sed '/^$/d' arquivo.txt > novoarquivo.txt
ou
$ awk 'NF>0' arquivo.txt > novoarquivo.txt
Qualquer um dos dois comandos funciona.
Blog com conteúdo sobre os projetos que tenho trabalhado: SEGURANÇA DA INFORMAÇÃO, VOIP COM ASTERISK, VIRTUALIZAÇÃO DE SERVIDORES VMWARE SERVER, ESX, EMAIL, FIREWALL, WEB-PROXIES, VPN, MIGRAÇÕES, LDAP, SAMBA, AD, ORACLE, MySQL, RADIUS, DHCP, DNS, PHP, C++, AUTENTICAÇÃO WIFI, CAPTIVEPORTAL, SATELITE, NETWORK...
Pesquisar neste blog
quarta-feira, 28 de março de 2012
segunda-feira, 12 de março de 2012
[NAGIOS] - O que RSZDT significa?
PROCESS STATE CODES - different values that the s, stat and state output specifiers(header "STAT" or "S") will display to describe the state of a process.
D Uninterruptible sleep (usually IO)
R Running or runnable (on run queue)
S Interruptible sleep (waiting for an event to complete)
T Stopped, either by a job control signal or because it is being traced.
W paging (not valid since kernel 2.6.xx)
X dead (should never be seen)
Z Defunct ("zombie") process, terminated but not reaped by its parent.
D Uninterruptible sleep (usually IO)
R Running or runnable (on run queue)
S Interruptible sleep (waiting for an event to complete)
T Stopped, either by a job control signal or because it is being traced.
W paging (not valid since kernel 2.6.xx)
X dead (should never be seen)
Z Defunct ("zombie") process, terminated but not reaped by its parent.
quarta-feira, 7 de março de 2012
Comunicação Serial RS232 - Monitor Samsung 400MX
Olá pessoal,
para quem usa o sistema de digital signage e deseja fazer a automação/programação para ligar e desligar os monitores conectados aos mini-pcs via porta serial rs232. Esse mesmo código abaixo pode ser usado para outros tipos de Monitores, basta verificar nos manuais quais são os comandos, no meu caso o monitor aceita comandos pré-definidos pelo manual, esses comandos são em hexadecimais.
#include iostream
#include conio.h
#include stdio.h
#include time.h
#include windows.h
#include string.h
#include serial.h
// Flow control flags
#define FC_DTRDSR 0x01
#define FC_RTSCTS 0x02
#define FC_XONXOFF 0x04
// ascii definitions
#define ASCII_BEL 0x07
#define ASCII_BS 0x08
#define ASCII_LF 0x0A
#define ASCII_CR 0x0D
#define ASCII_XON 0x11
#define ASCII_XOFF 0x13
HANDLE* ptr;
using namespace std;
// variables used with the com port
BOOL bPortReady;
DCB dcb;
COMMTIMEOUTS CommTimeouts;
BOOL bWriteRC;
BOOL bReadRC;
DWORD iBytesWritten;
DWORD iBytesRead;
HANDLE SerialInit(char *ComPortName, int BaudRate)
{
char status;
DWORD dwStoredFlags;
HANDLE hCom;
hCom = CreateFile(ComPortName,
GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security
OPEN_EXISTING,
0, // no overlapped I/O
NULL); // null template
if (hCom == INVALID_HANDLE_VALUE)
{
printf ("CreateFile failed with error %d.\n", GetLastError());
printf("Can not open %s!!\n\n",ComPortName);
system("pause");
exit(1);
} else {
status = 1;
}
dwStoredFlags = EV_BREAK | EV_CTS | EV_DSR | EV_ERR | EV_RING |\
EV_RLSD | EV_RXCHAR | EV_RXFLAG | EV_TXEMPTY ;
if (!SetCommMask(hCom, dwStoredFlags))
printf("Can not open %s!!\n\n",ComPortName);
bPortReady = SetupComm(hCom, 2, 128); // set buffer sizes
if (bPortReady = GetCommState(hCom, &dcb))
{
dcb.BaudRate = BaudRate;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fAbortOnError = TRUE;
// set XON/XOFF
dcb.fOutX = FALSE; // XON/XOFF off for transmit
dcb.fInX = FALSE; // XON/XOFF off for receive
// set RTSCTS
dcb.fOutxCtsFlow = FALSE; // turn on CTS flow control
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; //
// set DSRDTR
dcb.fOutxDsrFlow = FALSE; // turn on DSR flow control
//dcb.fDtrControl = DTR_CONTROL_ENABLE; //
dcb.fDtrControl = DTR_CONTROL_DISABLE; //
// dcb.fDtrControl = DTR_CONTROL_HANDSHAKE; //
} else {
printf("Erro de parametrizacao!!\n\n");
}
bPortReady = SetCommState(hCom, &dcb);
// Communication timeouts are optional
bPortReady = GetCommTimeouts (hCom, &CommTimeouts);
CommTimeouts.ReadIntervalTimeout = 5000;
CommTimeouts.ReadTotalTimeoutConstant = 5000;
CommTimeouts.ReadTotalTimeoutMultiplier = 1000;
CommTimeouts.WriteTotalTimeoutConstant = 5000;
CommTimeouts.WriteTotalTimeoutMultiplier = 1000;
bPortReady = SetCommTimeouts (hCom, &CommTimeouts);
if (status == 1){
printf("Comunicacao com a porta %s: Ok\n",ComPortName);
}
return hCom;
}
char SerialGetc(HANDLE *hCom)
{
char rxchar;
BOOL bReadRC;
static DWORD iBytesRead;
bReadRC = ReadFile(*hCom, &rxchar, 1, &iBytesRead, NULL);
return rxchar;
}
void SerialPutc(HANDLE *hCom, char txchar)
{
BOOL bWriteRC;
static DWORD iBytesWritten;
bWriteRC = WriteFile(*hCom, &txchar, 1, &iBytesWritten,NULL);
return;
}
char* SerialGets(HANDLE *hCom)
{
static char rxstring[256];
char c;
int pos = 0;
while(pos <= 255) { c = SerialGetc(hCom); if(c == '\r') continue; // discard carriage return rxstring[pos++] = c; if(c == '\n') break; } rxstring[pos] = 0; return rxstring; } void SerialPuts(HANDLE *hCom, char *txstring) { BOOL bWriteRC; static DWORD iBytesWritten; bWriteRC = WriteFile(*hCom, txstring, strlen(txstring), &iBytesWritten,NULL); } void sleep( int _wait) { clock_t goal; goal = clock() + _wait; while( goal > clock() );
}
int desliga(HANDLE *hCom)
{
if(!WriteFile(*hCom,"\xAA",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x11",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\xFE",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x01",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x00",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x10",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
}
int liga(HANDLE *hCom)
{
if(!WriteFile(*hCom,"\xAA",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x11",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\xFE",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x01",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x01",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x11",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
}
int main(int argc, char *argv[])
{
int op = atoi(argv[1]);
HANDLE my=SerialInit("com2",9600);
switch (op) {
case 1:
liga(&my);
break;
case 0:
desliga(&my);
break;
}
liga(&my);
//Fecha porta serial
printf(" %c ",SerialGetc(&my));
CloseHandle(&my);
return 0;
system("pause");
}
Arquivo Serial.h
// Flow control flags
#define FC_DTRDSR 0x01
#define FC_RTSCTS 0x02
#define FC_XONXOFF 0x04
// ascii definitions
#include stdio.h
#include time.h
#include string.h
#define ASCII_BEL 0x07
#define ASCII_BS 0x08
#define ASCII_LF 0x0A
#define ASCII_CR 0x0D
#define ASCII_XON 0x11
#define ASCII_XOFF 0x13
HANDLE SerialInit(char*, int);
char SerialGetc(HANDLE*);
void SerialPutc(HANDLE*, char);
char* SerialGets(HANDLE*);
void SerialPuts(HANDLE*, char*);
void sleep(int);
para quem usa o sistema de digital signage e deseja fazer a automação/programação para ligar e desligar os monitores conectados aos mini-pcs via porta serial rs232. Esse mesmo código abaixo pode ser usado para outros tipos de Monitores, basta verificar nos manuais quais são os comandos, no meu caso o monitor aceita comandos pré-definidos pelo manual, esses comandos são em hexadecimais.
#include iostream
#include conio.h
#include stdio.h
#include time.h
#include windows.h
#include string.h
#include serial.h
// Flow control flags
#define FC_DTRDSR 0x01
#define FC_RTSCTS 0x02
#define FC_XONXOFF 0x04
// ascii definitions
#define ASCII_BEL 0x07
#define ASCII_BS 0x08
#define ASCII_LF 0x0A
#define ASCII_CR 0x0D
#define ASCII_XON 0x11
#define ASCII_XOFF 0x13
HANDLE* ptr;
using namespace std;
// variables used with the com port
BOOL bPortReady;
DCB dcb;
COMMTIMEOUTS CommTimeouts;
BOOL bWriteRC;
BOOL bReadRC;
DWORD iBytesWritten;
DWORD iBytesRead;
HANDLE SerialInit(char *ComPortName, int BaudRate)
{
char status;
DWORD dwStoredFlags;
HANDLE hCom;
hCom = CreateFile(ComPortName,
GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security
OPEN_EXISTING,
0, // no overlapped I/O
NULL); // null template
if (hCom == INVALID_HANDLE_VALUE)
{
printf ("CreateFile failed with error %d.\n", GetLastError());
printf("Can not open %s!!\n\n",ComPortName);
system("pause");
exit(1);
} else {
status = 1;
}
dwStoredFlags = EV_BREAK | EV_CTS | EV_DSR | EV_ERR | EV_RING |\
EV_RLSD | EV_RXCHAR | EV_RXFLAG | EV_TXEMPTY ;
if (!SetCommMask(hCom, dwStoredFlags))
printf("Can not open %s!!\n\n",ComPortName);
bPortReady = SetupComm(hCom, 2, 128); // set buffer sizes
if (bPortReady = GetCommState(hCom, &dcb))
{
dcb.BaudRate = BaudRate;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fAbortOnError = TRUE;
// set XON/XOFF
dcb.fOutX = FALSE; // XON/XOFF off for transmit
dcb.fInX = FALSE; // XON/XOFF off for receive
// set RTSCTS
dcb.fOutxCtsFlow = FALSE; // turn on CTS flow control
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; //
// set DSRDTR
dcb.fOutxDsrFlow = FALSE; // turn on DSR flow control
//dcb.fDtrControl = DTR_CONTROL_ENABLE; //
dcb.fDtrControl = DTR_CONTROL_DISABLE; //
// dcb.fDtrControl = DTR_CONTROL_HANDSHAKE; //
} else {
printf("Erro de parametrizacao!!\n\n");
}
bPortReady = SetCommState(hCom, &dcb);
// Communication timeouts are optional
bPortReady = GetCommTimeouts (hCom, &CommTimeouts);
CommTimeouts.ReadIntervalTimeout = 5000;
CommTimeouts.ReadTotalTimeoutConstant = 5000;
CommTimeouts.ReadTotalTimeoutMultiplier = 1000;
CommTimeouts.WriteTotalTimeoutConstant = 5000;
CommTimeouts.WriteTotalTimeoutMultiplier = 1000;
bPortReady = SetCommTimeouts (hCom, &CommTimeouts);
if (status == 1){
printf("Comunicacao com a porta %s: Ok\n",ComPortName);
}
return hCom;
}
char SerialGetc(HANDLE *hCom)
{
char rxchar;
BOOL bReadRC;
static DWORD iBytesRead;
bReadRC = ReadFile(*hCom, &rxchar, 1, &iBytesRead, NULL);
return rxchar;
}
void SerialPutc(HANDLE *hCom, char txchar)
{
BOOL bWriteRC;
static DWORD iBytesWritten;
bWriteRC = WriteFile(*hCom, &txchar, 1, &iBytesWritten,NULL);
return;
}
char* SerialGets(HANDLE *hCom)
{
static char rxstring[256];
char c;
int pos = 0;
while(pos <= 255) { c = SerialGetc(hCom); if(c == '\r') continue; // discard carriage return rxstring[pos++] = c; if(c == '\n') break; } rxstring[pos] = 0; return rxstring; } void SerialPuts(HANDLE *hCom, char *txstring) { BOOL bWriteRC; static DWORD iBytesWritten; bWriteRC = WriteFile(*hCom, txstring, strlen(txstring), &iBytesWritten,NULL); } void sleep( int _wait) { clock_t goal; goal = clock() + _wait; while( goal > clock() );
}
int desliga(HANDLE *hCom)
{
if(!WriteFile(*hCom,"\xAA",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x11",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\xFE",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x01",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x00",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x10",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
}
int liga(HANDLE *hCom)
{
if(!WriteFile(*hCom,"\xAA",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x11",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\xFE",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x01",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x01",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x11",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
}
int main(int argc, char *argv[])
{
int op = atoi(argv[1]);
HANDLE my=SerialInit("com2",9600);
switch (op) {
case 1:
liga(&my);
break;
case 0:
desliga(&my);
break;
}
liga(&my);
//Fecha porta serial
printf(" %c ",SerialGetc(&my));
CloseHandle(&my);
return 0;
system("pause");
}
Arquivo Serial.h
// Flow control flags
#define FC_DTRDSR 0x01
#define FC_RTSCTS 0x02
#define FC_XONXOFF 0x04
// ascii definitions
#include stdio.h
#include time.h
#include string.h
#define ASCII_BEL 0x07
#define ASCII_BS 0x08
#define ASCII_LF 0x0A
#define ASCII_CR 0x0D
#define ASCII_XON 0x11
#define ASCII_XOFF 0x13
HANDLE SerialInit(char*, int);
char SerialGetc(HANDLE*);
void SerialPutc(HANDLE*, char);
char* SerialGets(HANDLE*);
void SerialPuts(HANDLE*, char*);
void sleep(int);
quinta-feira, 1 de março de 2012
VIM - Substituindo tabs por espaços
Se você estiver precisando trocar "Tab" por espaços para identação basta fazer o seguinte:
:set tabstop=n // seta para cada tab o número n de espaços
:set expandtab // troca a tab por espaço
Note que para as tabs já existentes no código estes comandos não funcionarão, para ajustar isto basta fazer:
:retab
:set tabstop=n // seta para cada tab o número n de espaços
:set expandtab // troca a tab por espaço
Note que para as tabs já existentes no código estes comandos não funcionarão, para ajustar isto basta fazer:
:retab
Shellscript - Como converter strings maiúsculas para minusculas e vice-versa
echo 'string em caixa baixa' | tr [:lower:] [:upper:]
Caso queria converter de maiúsculo para minusculo basta fazer o processo inverso:
echo 'STRING EM CAIXA ALTA' | tr [:upper:] [:lower:]
Assinar:
Postagens (Atom)