vi/vim 中可以使用 :s 命令来替换字符串,例如::s/vivian/sky/ 替换当前行第一个 vivian 为 sky:s/vivian/sky/g 替换当前行所有 vivian 为 sky:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky:2,$s/vivian/sky/g 替换第 2 行开始到最后一行中每一行所有 vivian 为 skyn 为数字,若 n 为 .,表示从当前行开始到最后一行:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/1.:s/vivian/sky/ 替换当前行第一个 vivian 为 sky:s/vivian/sky/g 替换当前行所有 vivian 为 sky2. :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky(n 为数字,若 n 为 .,表示从当前行开始到最后一行)3. :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky4. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/5. 删除文本中的^M问题描述:对于换行,window下用回车换行(0A0D)来表示,Linux下是回车(0A)来表示。这样,将window上的文件拷到Unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。· 使用命令:cat filename1 | tr -d "^V^M" > newfile;· 使用命令:sed -e "s/^V^M//" filename > outputfilename。需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。· 在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:%s/^V^M//。· :%s/^M$//g如果上述方法无用,则正确的解决办法是:· tr -d "\r" < src >dest· tr -d "\015" dest· strings A>B6. 其它利用 :s 命令可以实现字符串的替换。具体的用法包括::s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1:g/str1/s//str2/g 功能同上从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
posted @
2012-11-14 21:50 RUI 阅读(257) |
评论 (0) |
编辑 收藏
1.禁止ci无用的代码、资源、注释到svn中,保持代码库整洁。(这一点非常重要,此类ci在项目后期会使团队付出巨大的代价,成为产品维护、项目重构的重大阻力)
2.确保做到每次ci涉及的物理修改不超过一个逻辑功能点
3.做某个明确的功能点时,确保完成100%的工作,并以此做工作量评估, 设计时适当考虑扩展性,禁止在代码中采用“取巧手段”完成 可预见的、确定需求的 90%,剩余的10%将极大降低团队中其他成员的工作效率。
posted @
2011-07-26 00:34 RUI 阅读(173) |
评论 (0) |
编辑 收藏
摘要: Sending Data with Messages In this section, we'll examine how the system transfers data between...
阅读全文
posted @
2010-05-08 23:30 RUI 阅读(2446) |
评论 (0) |
编辑 收藏
#include
"stdio.h"
#include
"stdlib.h"
#include
"string.h"
int cnt[10] = {1};
void
count(int n)
{
while
(n)
{
cnt[n%10]++;
n = n /10;
}
}
/**
num >= 0 && num <= 9;
*/
int
count2(int src, int num)
{
char str[100] = {0};
char tmpstr[100] = {0};
sprintf(str,
"%d", src);
int len = strlen(str);
int ret = len-1;
int tmp = len - 2;
while (tmp >= 1)
{
ret *= 10;
tmp--;
}
if (!num)
{
int total = 10;
if ( len < 2)
{
total = 0;
}
tmp = 9;
for ( int k = 3; k <= len; ++k)
{
tmp *= 10;
total += tmp * (k-1);
}
if (total)
{
ret = total - 9 * ret;
}
}
int t = 0;
int t0, t1;
for (int i = 0; i < len; ++i)
{
t0 = 0;
t1 = 0;
t = 1;
for (int k = 0; k < i; ++k)
{
t0 = t0*10 + str[k]-
'0';
t *= 10;
}
t /= 10;
t0 -= t;
t0 += 1;
t = 0;
for (int k = i +1; k < len; ++k)
t1 = t1*10 + str[k]-
'0';
t1 += 1;
if (str[i]-'0'>num)
{
if (!i && !num && len > 1) t0 = 0;
t1 = 0;
}
else if (str[i]-'0'==num)
{
t0--;
}
else
{
t0--;
t1 = 0;
}
for (int k = i+1; k < len; ++k)
t0 *= 10;
ret += t0 + t1;
}
return ret;
}
int
main()
{
int
o_o = 1;
while
(o_o <= 10000)
{
memset(cnt, 0 ,
sizeof cnt);
cnt[0] = 1;
for (int i =0 ;i <= o_o; ++i)
count(i);
for ( int i = 0; i <= 9; ++i)
{
int n1 = cnt[i];
int n2 = count2(o_o, i);
if (n1- n2)
{
printf(
" o_o = %d , a[%d] = %d, %d\n",o_o, i, n1,n2 );
goto
_exit;
}
}
++o_o;
}
_exit:;
return
0;
}
posted @
2010-05-06 17:24 RUI 阅读(311) |
评论 (0) |
编辑 收藏
#include "stdafx.h"
#include <iostream>
#include "windows.h"
#include "stdio.h"
#include "stdlib.h"
#include "signal.h"
#include "process.h"
#include "malloc.h"
#include "fstream"
#include "list"
#include "vector"
#include "algorithm"
#include "time.h"
#include "queue"
#include "stack"
using namespace std;
typedef struct TNode
{
TNode *left, *right;
int data;
TNode(int d){
left = right = NULL;
data = d;
}
} TNode;
void inorderTrave(TNode* root)
{
stack<TNode*> st;
st.push(root);
TNode *p = 0;
while (!st.empty())
{
while(st.top())st.push(st.top()->left);
st.pop();
if (!st.empty())
{
p = st.top();
st.pop();
printf("%d, ", p->data);
st.push(p->right);
}
}
}
void preTrave(TNode* root)
{
stack<TNode*> st;
while (root || !st.empty())
{
while(root)
{
printf("%d, ", root->data);
if (root->right) st.push(root->right);
root = root->left;
}
if (!st.empty())
{
root = st.top();
st.pop();
}
}
}
void postTrave(TNode* root)
{
stack<TNode*> st;
stack<int> stF;
while (root || !st.empty())
{
while (root)
{
st.push(root);
stF.push(0);
root = root->left;
}
root = st.top();
int f = stF.top();
st.pop();stF.pop();
if (f == 0)
{
st.push(root);
stF.push(1);
{
root = root->right;
}
}
else if (f == 1)
{
printf("%d, ", root->data);
root = 0;
}
}
}
int main()
{
TNode *r = new TNode(1);
TNode *r1 = new TNode(2);
TNode *r2 = new TNode(3);
TNode *r12 = new TNode(4);
TNode *r21 = new TNode(5);
r->left = r1;
r->right = r2;
r1->right = r12;
r2->left= r21;
preTrave(r);
printf("\n");
inorderTrave(r);
printf("\n");
postTrave(r);
return 0;
}
posted @
2010-04-28 23:54 RUI 阅读(252) |
评论 (0) |
编辑 收藏
void swap(int& a, int& b)
{
int c = a;
a = b;
b = c;
}
int partion(int a[], int p, int r)
{
double pp = rand()/double(RAND_MAX);
int randpos = (int)((r-p) * pp) + p;
swap(a[p], a[randpos]);
int x = a[p];
int i=0, j =0;
i = p, j = r +1;
while(1)
{
while (i <r &&a[++i] < x);
while (a[--j] > x);
if (i >= j)
{
break;
}
swap(a[i],a[j]);
}
a[p] = a[j];
a[j] = x;
return j;
}
int main()
{
int a[] = {7,6,5,1};
int pos = 0;
int K = 9994;
int st = 0;
int ed = sizeof (a) /sizeof(a[0]) - 1;
while (K)
{
pos = partion(a, st, ed);
if (ed - pos +1 <= K)
{
K -= ed-pos + 1;
for (int j = pos; j <= ed; ++j)
cout << a[j] << endl;
ed = pos - 1;
}
else
{
st = pos+1;
}
if (st > ed)
{
cout << "error " << endl;
return 1;
}
}
return 0;
}
posted @
2010-04-28 23:09 RUI 阅读(445) |
评论 (0) |
编辑 收藏