문자열 치환을 할때 슬러쉬나 특수문자가 들어갈때

 

 -> sed -i 's/${fileWithPath}/HAHA/g' $file

 

 이렇게

 -> sed -i 's|'$fileWithPath'|HAHA|g' file

 

 쓰는 방법이 있다.

찾기만 할 때 문법은 다음과 같다.

find 검색할 디렉토리 -name "*" | xargs grep 검색할 내용.
ex) find /home/xxxx/yyyy -name "*" | xargs grep ttf


** 2016.03.15
근데 위에 방법에 문제가 있는지.. 잘 안되는 것 같다. 그냥 grep 만 사용해도 된다.

grep -r "xxxx" 디렉토리경로
ex) grep -r "너구리" .


-r 은 하위 디렉토리까지 모두(Recursively) 검사하라는 뜻이다.

원문은 이 곳에.

바꾸기까지 하려면 응용이 필요하다.
예를 들어, 한 디렉토리 내에 모든 파일을 검색하고, 파일 내용에 있는 특정 문자열을 다른 문자열로 바꿔주고 싶다면 다음과 같이 한다.

먼저 바꾸고자하는 파일들이 있는 특정 디렉토리로 이동한다.
 find . -type f -exec sed -i 's/찾는 문자열/바꿀 문자열/g' {} \;


예) find . -type f -exec sed -i 's/lucid/maverick/g' {} \;


만약 모든 파일이 아니고 특정 파일만 찾는 것이라면, 첫번째처럼 조건을 주면 된다.
예) find /etc/apt/sources.list.d -iname '*.list' -exec sed -i 's/lucid/maverick/g' {} \;

이렇게 되면, 각 파일에 포함되어 있던 lucid 문자열이 maverick 으로 모두 바뀐다.

이 부분은 이 곳 을 참고했다.

[출처] http://egloos.zum.com/nemonein/v/4686258 by 아무도안

'리눅스 명령어' 카테고리의 다른 글

ldd - 공유 라이브러리 의존관계 확인  (0) 2016.12.29
특정 파일내 문자열 치환 2  (0) 2016.10.13

[문제] You want to determine the most popular person in the social network. To do this, you will count the number of "2-friends" that each person has. Person A is called a 2-friend of another person B if they are friends with each other of if there exists some person C who is a friend of both A and B. The most popular person is the person with the highest number of 2-friends. (There might be more than one if multiple people all have the maximal number of 2-friends.)

You are given a String[] friends, where the j-th character of the i-th element is 'Y' if person i and person j are friends, and 'N' otherwise. Return the number of 2-friends of the most popular person in this social network


[예시 : 입력 데이터와 출력 데이터]


friends = {"NYY", "YNY", "YYN"}


Returns : 2


모든 사람이 2명의 전체 친구가 있습니다.


public class FriendScore {


   public static void main(String[] args){

    String[][] friends = new String[][]{{"N","Y","N","N","N"},

                                       {"Y","N","Y","N","N"},

                                       {"N","Y","N","Y","N"},

                                       {"N","N","Y","N","Y"},

                                       {"N","N","N","Y","N"}};



    int fHigher = 0, sHigher=0, flag=0;


    for(int i=0; i<friends[0].length; i++){

        if(fHigher >= sHigher)

            sHigher = fHigher;

        fHigher =0;


      for(int j=0; j<friends[0].length; j++) {

          if(friends[i][j].equals("Y"))

              fHigher++;


          for(int z=0; z<friends[0].length;  z++){

              if(i == j) {

                  continue;

              }else if(friends[j][i].equals("Y") && friends[j][z].equals("Y") && friends[i][z].equals("N"))

                  flag++;

          }


          if(flag >= 2){

           fHigher += flag-1;

           flag = 0;

          }

      }

    }


    System.out.println(sHigher);

   }

}




변하는 것과 변하지 않는 것을 구분하는 프로그래밍



C언어는 컴퓨터 역사의 초기에 개발된 언어입니다. 최신 언어들이 개발 편의를 위해 제공하는 기능들도 없고 문법도 사람보다는 기계에 더 친화적입니다. 그래서 개발자 스스로 철학을 가지고 사용해야하는 언어입니다. 제가 소개하는 디자인 방법들이 자신만의 개발 철학을 세우는데 도움이 되길 바랍니다.

제가 제일먼저 소개해드리고싶은 디자인은 "변하는 것과 변하지 않는 것을 구분하자" 입니다. 가장 먼저 소개하는 이유는 동양철학에서 말하는 음양오행에서 음양에 해당하는 개념이고, 대부분의 잘 만들어진 C 코드의 밑바탕에 이 개념이 깔려있기 때문입니다. 또한 음과 양이 모든 사상의 밑바탕을 이루듯이 언어나 개발 제품에 상관없이 적용할 수 있는 철학이라고 생각하기 때문입니다.

최신 언어들이 제공하는 기능들이나 프로그래밍 기법들을 보면 가장 밑바당에는 "변하는 것과 변하지 않는 것을 구분"하는 개념이 녹아들어있습니다. 객체지향 철학에서 객체가 가지는 속성은 변하는 것이고 속성을 변경하는 메소드는 변하지 않는 것입니다. 객체라는 틀은 변하지 않는 것이고 객체로 생성한 인스턴스는 변하는 것입니다. 함수형 언어들은 함수를 변하지 않는 것으로 생각하고 함수에 입력되는 데이터를 변하는 것으로 생각합니다. 디자인 패턴 기법들을 보면 변하지 않는 코드와 변하는 코드를 분리하는 것이 핵심 개념인 패턴들이 많습니다. 설계 원칙에도 Data driven design이라는 원칙이 있는데 이것또한 최대한 고정된 논리로 다양한 데이터를 처리한다는 원칙입니다. 바꿔 말하면 일정한 코드를 가지고 최대한 다양한 데이터를 처리하도록 하자는 것입니다.

이런 예들을 따져보면 형태가 변하지 않거나, 값이 변하지 않거나, 실제로 생성되는 것이 아니라 생성되는 것들이 공통적으로 가져야할 원칙이거나, 보이지 않게 밑바탕에서 일정하게 동작하는 것 등을 "변하지 않는 것", 혹은 음적인 부분이라고 부를 수 있습니다. 그와 반대로 형태가 변하거나 값이 변하거나, 실제로 생성되어 각자 고유한 값이나 속성을 가지는 개체, 겉으로 드러나 사용자가 조정할 수 있는 값이나 속성들이 양적인 부분, "변하는 것"이라고 부를 수 있습니다.

2가지 예제 코드를 보면서 C언어로 프로그래밍에서 음과 양을 어떻게 나눌 것인지를 고민해보겠습니다. 정답은 없습니다만 고민하는 것 자체로 많은 생각을 이끌어낼 수 있는 실마리가 될 것이라 믿습니다. 비록 간단한 예제를 작성하는 단계에서 "변하는 것과 변하지 않는 것을 구분"하는 일을 연습하지만 사실은 제품을 설계할때부터 코드를 작성할 때까지 계속 고민해야할 사항입니다.


출저 : https://opentutorials.org/module/1329/8583


'개발에 있어서 좋은 글' 카테고리의 다른 글

방어적 프로그래밍  (0) 2016.12.27


 


   수업을 마치고 계단을 내려오는 길에 어떤 강의를 하고 있었고, 심심해서 그 강의를 듣게 되었다. 이 때가 그분과의 첫 만남이었고 그 기억을 마음속에 담아 서점을 향하게 되었다. 기획의 정석? 수학의 정석도 아니고 '머야?'하면서 구매를 하게 되었다. 총 10가지 목차가 하나의 공식(습관)으로 나열 되어 있었다. 

   1. focus 근본적으로 중요한 게 뭘까

    협상에서 덜 중요한 누구인가? 언제나 자기자신임을 기억해야 하낟. 가장 주용한 사람은 바로 상대방이다. 그러므로 어떻게 상대방 머리에 어떤 그림을 그리고 있는지에 대해서 분명해야 한다. 

 2. 4MAT 왜 내 말을 못 알아들을까

  세계적인 교육학자 버니스 매카시 박사는 우리의 뇌가 학습할 때 아래와 같은 4단계의 프로세스를 거친다고 했다. 

 1단계 :  WHY    2단계: WHAT   3단계 : HOW 4단계:IF

3. WHY 잘 팔리는 데는 이유가 있다.

  대분의 기획과 스토리텔링이 실패하는 이유는 ? 약만 팔기 때문이다. "OO아, 약사! 이 약은 이런 약이야." 이렇게 말하면 사람들은? 그 약에 관심을 갖지 않는다. 따라서 약을 팔기 전에 질병을 팔아라 팔아라. 즉 이런 질병이 있기 때문에 이 약을 사야 합니다가 되어야 한다. WHY가 나오고 WHAT이 나와야 한다.

 4.  Drawing

  무언가를 표현할때 그림으로 도식화하면 내가 찾지 못하는 부분을 찾을 수 있고, 또한 한 눈에 볼수 있다. 

 5. Definition

     



+ Recent posts