grep 간단 사용법🔍

grep은 주어진 파일(들)이나 표준입력에서 주어진 패턴과 매칭되는 라인들을 필터링하여 출력해주는 유틸리티로 여러 파일에서 특정한 문자열을 한 번에 찾을 수 있게하는 도구이다.

grep의 사촌쯤 되는 fgrep, egrep도 있는데 이들은 각각 grep의 -F, -E 옵션으로 통합되었으며 현재는 오래된 스크립트에서 호출하는 상황을 위해호환성 유지 측면으로만 남겨져 있다고 생각하면 된다.

grep 간단 사용법🔍 더보기

쉘에서 파일 디스크립터를 사용한 필터 구현

쉘에서 파일 디스크립터 사용하기

입출력을 반복하는 형태의 커뮤니케이션을 구현하기 위해서는 한 쌍의 FIFO 파이프를 만들어서 사용한다. 파이프는 mkfifo 명령을 통해서 이름이 붙은 파이프를 만들 수 있다. (이름이 붙은 파이프라는 것은 결국 임시파일이다.)

mkfifo /tmp/infifo
mafifo /tmp/outfifo

입력을 sed를 이용해 필터링하여 출력하는 예제는 다음과 같다.
쉘에서 파일 디스크립터를 사용한 필터 구현 더보기

[Cocoa / Objective-C] NSString의 문자열 뒤집기, 글자를 정렬한 문자열 구하기.

프레임워크에 당연히 있는 기능일 줄 알았는데 없더라… 그래서 자작.

짤막한 설명

문자열 뒤집기는 C문자열로 바꾼다음 포인터를 쓰는게 제일 깔끔할 것 같아서 그렇게 했다. -UTF8String 메소드는 const char 타입 포인터를 리턴하는데, 이걸 char 형으로 강제캐스팅하는 게 찜찜해서 strcpy로 복사했는데, 어디서 이 함수도 상당히 나쁘다고 쓰지 말라더라. (다른 뭐를 쓰라던데 그게 기억이 안나서 그냥 씀)

malloc으로 할당한 메모리는 ARC의 관심밖이므로 철저히 free 해주는 나란 남자, 그런 남자…

문자열내 문자들을 사전순으로 정렬해주는 건 소인수 분해 따위나 할 때 쓸모가 있긴 있을텐데,  NSArraysortedUsingComparator: 메소드를 사용했다.  OSX에서는 코드 블럭( ^( ){ … } )을 쓰면 되는데 GNUStep에서는 이게 함수포인터를 쓰는 것 같더라. 아마 이 코드 그대로 쓰면 안될 듯. GNUStep의 정렬 메소드는 함수 포인터로 되어 있고 아예 메소드명이 달라서, NSSortDescriptor를 사용하는 방법으로 변경했다. 지난 번 버전의 코드는 여기에서 볼 수 있다.

함수 내에서 상당히 많은 autorelease 되는 NSString을 만들어낼 수도 있어서, 메소드 안쪽에 autoreleasepool 블럭을 설치해줬다.

/*
NSString+SPUtils
Category for NSString
-reversedString
: create reversed string.
NSString *reversed = [@"AbcdE" reversedString]; // reversed = @"EdcbA"
: create lexically sorted string.
NSString *sorted = [@"ae3ceox" sortedString]; // sorted = @"3aceeox"
23. 04. 13.
by sooop.
*/
#import <Foundation/Foundation.h>
@interface NSString (SPUtils)
-(NSString*)reversedString;
-(NSString*)sortedString;
@end;
@implementation NSString (SPUtils)
-(NSString*)reversedString
{
NSUInteger length = [self length], idx;
char *cString = (char*)malloc(sizeof(char)*(length+1));
strcpy(cString,[self UTF8String]);
char temp;
for(idx=0;idx<length/2;idx++) {
temp = *(cString + idx);
*(cString + idx) = *(cString + length - 1 - idx);
*(cString + length - 1 - idx) = temp;
}
NSString *reversedString = [NSString stringWithUTF8String:cString];
free(cString);
return reversedString;
}
-(NSString*)sortedString
{
NSString *resultString;
@autoreleasepool {
NSMutableArray *characters = [NSMutableArray array];
NSArray *sortedArray;
NSUInteger idx;
for(idx=0;idx<[self length];idx++) {
[characters addObject:[self substringWithRange:NSMakeRange(idx,1)]];
}
NSSortDescriptor *strDiscriptor = [[NSSortDescriptor alloc] initWithKey:@"description" ascending:YES];
NSArray *discs = @[strDiscriptor];
sortedArray = [characters sortedArrayUsingDescriptors:discs];
NSMutableString *string = [NSMutableString string];
for(idx=0;idx<[self length];idx++) {
[string appendString:[sortedArray objectAtIndex:idx]];
}
resultString = [string copy];
}
#if __has_feature(objc_arc)
return resultString;
#else
return [resultString autorelease];
#endif
}
@end
view raw NSString+SPUtils.m hosted with ❤ by GitHub

 

iTunes 11 출시

한국시간으로 11월 30일 새벽에 아이튠즈 11이 출시되었다. 원래는 10월에 출시될 예정이었는데 문제가 있어서 출시를 한 달 미루면서 일부 설계를 바꾸고 새로 작성한 부분이 꽤 된다는 이야기가 있다.  (11월 출시조차 못맞추는 건 아닐까 내심 조마조마했었다.)

거의 2년 가까이 아이튠즈의 외관에는 큰 변화가 없었는데, 그나마 마이너 업데이트가 계속 되었던 것은 iOS의 버전이 올라가면서 그에 맞는 드라이버 업데이트가 필요했기 때문이다. (윈도와 맥 공통으로 아이폰을 컴퓨터와 연결하는 데 필요한 장치 드라이버는 아이튠즈에 포함되어 있다. 그래서 상위 버전의 iOS와 동기화하려면 아이튠즈 업그레이드는 필수)

이번에 새로 출시된 iTunes 11은 사용자 인터페이스에 대해 대대적인 변경이 가해졌다. 그래서 기존 버전에 익숙한 사용자들 중 일부는 어어어? 하며 당혹스러워할 수 있다. (물론 기존 버전과 유사한 스타일의 UI로 세팅을 바꿀 수 있다. 이 부분은 국내에서 제일 가는 맥 관련 블로그를 운영중이신 ONE님의 블로그 포스팅을 참고)

새롭게 바뀐 UI는 익숙해진 기존 버전과는 판이하게 달라져서 조금 당황스러울 수는 있으나, 그 디자인 만큼은 세련의 극치라고 평가하고 싶다.  그리고 놀라운 점은 이토록 세련되고 미려한 디자인을 매끄럽게 돌아가도록 만들어냈다는 점에서도 높은 점수를 주고 싶다. 메뉴나 버튼 들이 많이 사라져서 좀 허전한(?)감이 들었는데 되려 불필요한 UI들을 싹 정리하면서도 매끄러운 효과들, 구석구석 사용성에 신경 쓴 흔적들을 보노라면 역시 애플이라며 엄지손가락을 치켜 세워주고 싶다.

게다가, 이전 버전까지의 아이튠즈는 iOS 기기만 아니면 절대 설치하고 싶지 않은 물건이었으나 이번 버전에서는 윈도에서도 엄청 빠릿해졌음을 체감할 수 있다. (아 애플님하, 제발 윈도용 사파리도 좀….) 게다가 얼마전 출시된 아이패드 미니의 경우에는 아이튠즈11에서만 동기화가 가능하니, 이번 업데이트는 무조건 다운로드 받아서 설치할 것을 권장한다.

맥의 부팅음을 없애는 방법

맥 특유의 부팅음은 PC계열의 삑- 하는 소리보다는 아름답지만, 도서관 등의 공공장소에서 재부팅이라도 한 번 할라치면 참 난감하다. (생각보다 이 부팅음의 소리는 큰 편이더라.) 맥 부팅음을 없애주는 앱 같은 것도 나와 있는 것 같던데. 암튼, 누군가는 이런 게 분명 필요한 모양이다. 이 부팅음을 영영 안나오게 하는 건 서드파티 앱 없이도 할 수 있다.

터미널을 열고 다음과 같이 입력한다. sudo 명령을 쓴다는 것은 이 명령을 입력하고 엔터를 친 후, 비밀 번호를 물어보게 된다.

 sudo nvram SystemAudioVolume=%80

입력 후 자신의 로그인 계정의 비밀번호를 넣어주면 된다.( 80%가 아니라 %80이다.)

추후에 이 설정을 복구하고 싶다면 다음의 명령을 사용한다.

sudo nvram -d SystemAudioVoluem