[출처] http://www.tuxfiles.org/linuxhelp/wildcards.html


Wildcards are a shell feature that makes the command line much more powerful than any GUI file managers. You see, if you want to select a big group of files in a graphical file manager, you usually have to select them with your mouse. This may seem simple, but in some cases it can be very frustrating. For example, suppose you have a directory with a huge amount of all kinds of files and subdirectories, and you decide to move all the HTML files, that have the word "linux" somewhere in the middle of their names, from that big directory into another directory. What's a simple way to do this? If the directory contains a huge amount of differently named HTML files, your task is everything but simple!

In the Linux CLI that task is just as simple to perform as moving only one HTML file, and it's so easy because of the shell wildcards. Wildcards are special characters that allow you to select filenames that match certain patterns of characters. This helps you to select even a big group of files with typing just a few characters, and in most cases it's easier than selecting the files with a mouse.

Here's a list of the most commonly used wildcards in bash:

Wildcard Matches
* zero or more characters
? exactly one character
[abcde] exactly one character listed
[a-e] exactly one character in the given range
[!abcde] any character that is not listed
[!a-e] any character that is not in the given range
{debian,linux} exactly one entire word in the options given

You can use wildcards with any command that accepts file names as arguments.

Let's have a few examples. Probably the * character is already familiar to you, because it's widely used in many other places, too, not just in Linux. For example, the following removes every file from the current directory:
$ rm *

The following command moves all the HTML files, that have the word "linux" in their names, from the working directory into a directory named dir1:
$ mv *linux*.html dir1

See, I told you that moving multiple files can be just as simple as moving only one file!

The following displays all files that begin with d and end with .txt:
$ less d*.txt

The following command removes all files whose names begin with junk., followed by exactly three characters:
$ rm junk.???

With this command you list all files or directories whose names begin with hda, followed by exactly one numeral:
$ ls hda[0-9]

This lists all files or directories beginning with hda, followed by exactly two numerals:
$ ls hda[0-9][0-9]

The following lists all files or directories whose name starts with either hd or sd, followed by any single character between a and c:
$ ls {hd,sd}[a-c]

This command copies all files, that begin with an uppercase letter, to directory dir2:
$ cp [A-Z]* dir2

This deletes all files that don't end with c, e, h or g:
$ rm *[!cehg]


[출처] http://www.viper.pe.kr/docs/make-ko/make-ko_6.html


타겟-종속적인 변수 값( Target-specific Variable Values)

make 에 있는 변수값들은 보통 전역적이다; 즉, 그들이 평가된 위치와 상관없이 이들은 동일하다(물론 그들이 리셋되지 않는다면). 한가지 예외는 자동 변수들의 경우이다 (see section 자동 변수들(Automatic Variables)).

다른 예외는 타겟-종속 변수 값(target-specific variable values)이다. 이 기능은 동일한 변수에 대해서, make 가 현재 빌드하고 있는 타겟에 기반해서, 다른 값들을 정의할 수 있도록 한다. 자동변수의 경우 이런 값들은 단지 타겟의 명령 스크립트의 내용안에서(그리고 다른 타겟-종속적인 할당에서)만 사용 가능하다.

타겟-종속적인 변수값은 다음과 같이 설정한다:

target ... : variable-assignment

또는 다음과 같이 정의한다:

target ... : override variable-assignment

다수의 target 값들은 타겟 리스트의 각 멤버에 대해서 타겟-종속적인 값을 개별적으로 생성한다.

variable-assignment 는 할당의 유효한 형태이면 아무거나 된다; 재귀적 (`='), 정적 (`:='), 덧붙이기 (`+=', 또는 조건 (`?='). variable-assignment에 나타나는 모든 변수들은 타겟의 내용물 안에서 평가된다: 그래서 임의의 사전-정의된 타겟-종속적인 변수 값들이 효력을 발휘할 것이다. 이 변수는 실제로 어떤 "전역" 값과도 구분이 된다는 점에 주목하자: 두 변수들이 동일한 취향(재귀적 vs. 정적)을 반드시 가질 필요는 없다.

타겟-종속적인 변수들은 다른 makefile 변수와 동일한 우선순위를 가진다. 명령행에서 주어진 변수들이(그리고 `-e' 옵션이 주어졌다면 환경에서 주어진 변수들이) 우선권을 가질것이다. override를 지정하는 것은 타겟-종속 변수 값이 더 선호되도록 할 것이다.

타겟-종속적인 변수들의 특수한 기능이 하나 더 있다: 타겟-종속적인 변수를 정의할 때 그 변수의 값이 또한 이 타겟의 모든 종속물들에 대해서도 영향을 미친다(단 이런 종속물들이 그들 자신의 타겟-종속적인 변수 값으로써 그것을 오버라이드하지 않았다면 말이다). 그래서 예를 들면 다음과 같은 문장은:

prog : CFLAGS = -g
prog : prog.o foo.o bar.o

CFLAGS`prog'에 대한 명령 스크립트에서 `-g'로 설정할 것이다. 그러나 이것은 또한 CFLAGS`prog.o', `foo.o', 그리고 `bar.o'를 생성하는 명령 스크립트안에서, 그리고 이들의 종속물들을 생성하는 임의의 명령 스크립트들을 생성하는 명령 스크립트들 안에서 `-g'로 설정할 것이다.

패턴-종속적인 변수값(Pattern-specific Variable Values)

타겟-종속적인 변수값 (see section 타겟-종속적인 변수 값( Target-specific Variable Values)) 에 덧붙여서, GNU make는 패턴-종속적인 변수값을 지원한다. 이 형에서 변수는 지정된 패턴과 일치하는 임의의 타겟에 대해서 정의된다. 이런식으로 정의된 변수들은, 그 타겟에 대해서 명시적으로 정의된 임으의 타겟-종속적인 변수들 이후에, 그리고 타겟 종속적인 변수가 어버이 타겟에 대해서 정의되기 전에, 검색된다.

패턴-종속적인 변수값은 다음과 같이 지정한다:

pattern ... : variable-assignment

또는 다음과 같이:

pattern ... : override variable-assignment

여기서 pattern 는 %-패턴이다. 타겟-종속 변수값과 동일하게 다수의 pattern 값들이 각 패턴에 대해서 개별적으로 패턴-종속 변수값을 생성한다. variable-assignment 는 유효한 할당이면 무엇이든 된다. 임의의 명령행 변수 설정이, override가 지정되지 않았다면, 더 높은 우선순위를 가진다.

예를 들어서:

%.o : CFLAGS = -O

이것은 패턴 %.o와 일치하는 모든 타겟들에 대해서 `-O'CFLAGS의 값으로 할당할 것이다.


[출처] http://woogyun.tistory.com/167

Unix의 vi로부터 유래된 vim이라는 편집기가 있다. Unix의 vi은 거창하게도 시각적(VIsual)인 편집기지만 이젠 골동품처럼 취급되는 편집기다. 모드 방식 편집기이기 때문에 초보자가 사용하기 매우 어렵다. 그런데도 불구하고 열광적인 팬이 많은 관계로 Windows용 vi도 사용되고 있다.

서론이 매우 길었다. Vim으로 텍스트 파일을 열고 다음 문자를 그대로 타이핑한 다음 엔터를 누르면 신기하게도 줄 단위로 정렬이 된다.

:sort

역순으로 정렬하고 싶다면 다음 명령어를 쓰면 된다.

:sort!

맨 앞에 있는 필드가 숫자고, 숫자를 기준으로 정렬하고 싶다면 sort 명령어에 n 옵션을 쓰면 된다.

:sort n

숫자를 기준으로 하지 않으면 그냥 ascii 코드 순서대로 정렬하기 때문에 9보다 10이 앞에 나온다. 숫자를 기준으로 정렬하되 역순으로 정렬하고 싶다면 sort! 명령어에 n 옵션을 쓰면 된다.

:sort! n

[출처] http://www.lws.pe.kr/46

ctrl + l

혹은

~/.bashrc 에 다음의 한줄 추가
alias clear='echo -e "\E[2J"'

[출처] http://www.mapoo.kr/entry/OpenProj-%EC%BA%98%EB%A6%B0%EB%8D%94-%EB%B0%8F-%EA%B8%B0%EB%B3%B8-%EC%9E%91%EC%97%85%EC%8B%9C%EA%B0%84-%EC%84%A4%EC%A0%95

OpenProj의 기본 일별 작업 시간이 한국실정과 맞지 않아서 오전 9 ~ 오후 6시로 맞추는 것임.
원하는대로 세팅이 안되서 한참을 테스트해보다가 세팅방법을 알아냄.
참고로 점심 시간 1시간은 빠진 시각이 적용.


<1> '작업시간 변경' 메뉴에서 기본 세팅.
1. 도구 - 작업 시간 변경... - 메뉴를 띄움
2. Ctrl 키를 누른채로 월 ~ 금 까지 클릭
3, From: 8:00 을 9:00으로 변경, To: 17:00 을 18:00으로 변경
4. 공휴일만 따로 클릭해서 '작업 시간 아님'을 체크 후 확인

<2> 프로젝트 시작일을 변경
1. 프로젝트 - 프로젝트 - 시작일의 오전 8:00을 오전 9:00으로 수정.


* 만약 사용자 캘린더를 설정하고자 하면
'작업시간 변경' 메뉴에서 New를 클릭하고 별도의 사용자 '작업시간 변경'을 만들면 된다.
그리고 프로젝트 - 프로젝트 정보 창에서 기본 캘린더를 '직접만든표'를 선택한다.
그리고 위의 <2> 프로젝트 시작일 변경을 한다.

'기타' 카테고리의 다른 글

[linux] vim에서 내용 정렬하기  (0) 2012.03.12
[cygwin] clear 명령  (0) 2012.02.24
[Makefile] 변수내용치환, for loop  (0) 2012.02.23
[C] hash table for C  (0) 2012.02.23
[perl] cygwin에서 debug시 오류나고 실행안될 때  (0) 2012.02.22
GNU make일 경우...

# 변수 치환

PAIRs=data/wikidic.txt data/chat_DB.txt
UTTs=$(subst:.txt=.utt)

# Makefile loop
#(foreach var, list , loop command with var; )

$(foreach txtfile,$(PAIRs),./splitUtt.pl $(txtfile) > $(txtfile:.txt=.utt);)

[출처] http://www.sourcecodesworld.com/source/show.asp?ScriptID=1188

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct _node{
 char *name;
 char *desc;
 struct _node *next;
}node;

#define HASHSIZE 101
static node* hashtab[HASHSIZE];

void inithashtab(){
 int i;
 for(i=0;i<HASHSIZE;i++)
  hashtab[i]=NULL;
}

unsigned int hash(char *s){
 unsigned int h=0;
 for(;*s;s++)
  h=*s+h*31;
 return h%HASHSIZE;
}

node* lookup(char *n){
 unsigned int hi=hash(n);
 node* np=hashtab[hi];
 for(;np!=NULL;np=np->next){
  if(!strcmp(np->name,n))
   return np;
 }

 return NULL;
}

char* m_strdup(char *o){
 int l=strlen(o)+1;
 char *ns=(char*)malloc(l*sizeof(char));
 strcpy(ns,o);
 if(ns==NULL)
  return NULL;
 else
  return ns;
}

char* get(char* name){
 node* n=lookup(name);
 if(n==NULL)
  return NULL;
 else
  return n->desc;
}

int install(char* name,char* desc){
 unsigned int hi;
 node* np;
 if((np=lookup(name))==NULL){
  hi=hash(name);
  np=(node*)malloc(sizeof(node));
  if(np==NULL)
   return 0;
  np->name=m_strdup(name);
  if(np->name==NULL) return 0;
  np->next=hashtab[hi];
  hashtab[hi]=np;
 }
 else
  free(np->desc);
 np->desc=m_strdup(desc);
 if(np->desc==NULL) return 0;

 return 1;
}

/* A pretty useless but good debugging function,
  which simply displays the hashtable in (key.value) pairs
*/
void displaytable(){
 int i;
 node *t;
 for(i=0;i<HASHSIZE;i++){
  if(hashtab[i]==NULL)
   printf("() ");
  else{
   t=hashtab[i];
   printf("(");
   for(;t!=NULL;t=t->next)
 printf("(%s.%s) ",t->name,t->desc);
   printf(") ");
  }
 }
}

void cleanup(){
 int i;
 node *np,*t;
 for(i=0;i<HASHSIZE;i++){
  if(hashtab[i]!=NULL){
   np=hashtab[i];
   while(np!=NULL){
 t=np->next;
 free(np->name);
 free(np->desc);
 free(np);
 np=t;
   }
  }
 }
}

#ifdef __TEST_MAIN__
int main(int argc, char *argv[]){
 int i;
 char* names[]={"name","address","phone","k101","k110", "k110"};
 char* descs[]={"Sourav","Sinagor","26300788","Value1","Value2", "Value3"};
 FILE *fp = NULL;


 inithashtab();
 for(i=0;i<6;i++)
  install(names[i],descs[i]);

 printf("Done ");
 printf("If we didnt do anything wrong.." "we should see %s ",get("k110"));

 install("phone","9433120451");

 printf("Again if we go right, we have %s and %s ",get("k101"),get("phone"));

 displaytable();
 cleanup();
 return 0;
}
#endif


 

ActivePerl이 깔려서 그것에 의해 perl이 돌아가는 경우 이런 경우가 생겼다.

cygwin에서 perl package를 새로 깔면 잘 동작함

'기타' 카테고리의 다른 글

[Makefile] 변수내용치환, for loop  (0) 2012.02.23
[C] hash table for C  (0) 2012.02.23
[perl] 시간, 날짜 얻기 2  (0) 2012.02.22
[perl] 시간, 날짜 얻기  (0) 2012.02.21
[perl] autoflush 를 켜기  (0) 2012.02.21

+ Recent posts